def to_json(self, filename, indent=2):
        """
        Return a JSON string of all model inputs and outputs.

        Parameters
        ----------
        filename : str or file
            Either the file name (string) or an open file (file-like object)
            where the data will be saved.
        indent : int, optional
            Indentation level for JSON output.

        Returns
        -------
        out : str
            JSON formatted output string.

        """
        d = self.to_dicts()
        if hasattr(filename, "write"):
            json.dump(d, filename, indent=indent)
        elif isinstance(filename, string_types):
            with open(os.path.expanduser(filename), "w") as f:
                json.dump(d, f, indent=indent)
        else:
            raise ValueError("Unknown filename or file-object")