Serialize obj as a JSON formatted stream to fp (a .write()-supporting file-like object).
If skipkeys is True then dict keys that are not basic types (str, unicode, int, long, float, bool, None) will be skipped instead of raising a TypeError.
If ensure_ascii is False, then the some chunks written to fp may be unicode instances, subject to normal Python str to unicode coercion rules. Unless fp.write() explicitly understands unicode (as in codecs.getwriter()) this is likely to cause an error.
If check_circular is False, then the circular reference check for container types will be skipped and a circular reference will result in an OverflowError (or worse).
If allow_nan is False, then it will be a ValueError to serialize out of range float values (nan, inf, -inf) in strict compliance of the JSON specification, instead of using the JavaScript equivalents (NaN, Infinity, -Infinity).
If indent is a non-negative integer, then JSON array elements and object members will be pretty-printed with that indent level. An indent level of 0 will only insert newlines. None is the most compact representation.
If separators is an (item_separator, dict_separator) tuple then it will be used instead of the default (', ', ': ') separators. (',', ':') is the most compact JSON representation.
encoding is the character encoding for str instances, default is UTF-8.
default(obj) is a function that should return a serializable version of obj or raise TypeError. The default simply raises TypeError.
To use a custom JSONEncoder subclass (e.g. one that overrides the .default() method to serialize additional types), specify it with the cls kwarg.