Commit d4460aaa authored by Georg Brandl's avatar Georg Brandl

#4785: document strict argument of JSONDecoder, plus add object_pairs_hook in the docstrings.

parent b67878a5
...@@ -149,7 +149,7 @@ Basic Usage ...@@ -149,7 +149,7 @@ Basic Usage
To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides the
:meth:`default` method to serialize additional types), specify it with the :meth:`default` method to serialize additional types), specify it with the
*cls* kwarg. *cls* kwarg; otherwise :class:`JSONEncoder` is used.
.. function:: dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, **kw) .. function:: dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, default=None, **kw)
...@@ -195,8 +195,8 @@ Basic Usage ...@@ -195,8 +195,8 @@ Basic Usage
are encountered. are encountered.
To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls`` To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
kwarg. Additional keyword arguments will be passed to the constructor of the kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments
class. will be passed to the constructor of the class.
.. function:: loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw) .. function:: loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, object_pairs_hook=None, **kw)
...@@ -275,6 +275,11 @@ Encoders and decoders ...@@ -275,6 +275,11 @@ Encoders and decoders
``'false'``. This can be used to raise an exception if invalid JSON numbers ``'false'``. This can be used to raise an exception if invalid JSON numbers
are encountered. are encountered.
If *strict* is ``False`` (``True`` is the default), then control characters
will be allowed inside strings. Control characters in this context are
those with character codes in the 0-31 range, including ``'\t'`` (tab),
``'\n'``, ``'\r'`` and ``'\0'``.
.. method:: decode(s) .. method:: decode(s)
......
...@@ -155,7 +155,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -155,7 +155,7 @@ def dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with ``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg. the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
""" """
# cached encoder # cached encoder
...@@ -213,7 +213,7 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, ...@@ -213,7 +213,7 @@ def dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True,
To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the
``.default()`` method to serialize additional types), specify it with ``.default()`` method to serialize additional types), specify it with
the ``cls`` kwarg. the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
""" """
# cached encoder # cached encoder
...@@ -244,8 +244,16 @@ def load(fp, cls=None, object_hook=None, parse_float=None, ...@@ -244,8 +244,16 @@ def load(fp, cls=None, object_hook=None, parse_float=None,
``object_hook`` will be used instead of the ``dict``. This feature ``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting). can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``object_pairs_hook`` is an optional function that will be called with the
result of any object literal decoded with an ordered list of pairs. The
return value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders that rely on the
order that the key and value pairs are decoded (for example,
collections.OrderedDict will remember the order of insertion). If
``object_hook`` is also defined, the ``object_pairs_hook`` takes priority.
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg. kwarg; otherwise ``JSONDecoder`` is used.
""" """
return loads(fp.read(), return loads(fp.read(),
...@@ -264,6 +272,14 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, ...@@ -264,6 +272,14 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
``object_hook`` will be used instead of the ``dict``. This feature ``object_hook`` will be used instead of the ``dict``. This feature
can be used to implement custom decoders (e.g. JSON-RPC class hinting). can be used to implement custom decoders (e.g. JSON-RPC class hinting).
``object_pairs_hook`` is an optional function that will be called with the
result of any object literal decoded with an ordered list of pairs. The
return value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders that rely on the
order that the key and value pairs are decoded (for example,
collections.OrderedDict will remember the order of insertion). If
``object_hook`` is also defined, the ``object_pairs_hook`` takes priority.
``parse_float``, if specified, will be called with the string ``parse_float``, if specified, will be called with the string
of every JSON float to be decoded. By default this is equivalent to of every JSON float to be decoded. By default this is equivalent to
float(num_str). This can be used to use another datatype or parser float(num_str). This can be used to use another datatype or parser
...@@ -280,7 +296,7 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None, ...@@ -280,7 +296,7 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
are encountered. are encountered.
To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` To use a custom ``JSONDecoder`` subclass, specify it with the ``cls``
kwarg. kwarg; otherwise ``JSONDecoder`` is used.
""" """
if (cls is None and object_hook is None and if (cls is None and object_hook is None and
......
...@@ -294,6 +294,15 @@ class JSONDecoder(object): ...@@ -294,6 +294,15 @@ class JSONDecoder(object):
place of the given ``dict``. This can be used to provide custom place of the given ``dict``. This can be used to provide custom
deserializations (e.g. to support JSON-RPC class hinting). deserializations (e.g. to support JSON-RPC class hinting).
``object_pairs_hook``, if specified will be called with the result of
every JSON object decoded with an ordered list of pairs. The return
value of ``object_pairs_hook`` will be used instead of the ``dict``.
This feature can be used to implement custom decoders that rely on the
order that the key and value pairs are decoded (for example,
collections.OrderedDict will remember the order of insertion). If
``object_hook`` is also defined, the ``object_pairs_hook`` takes
priority.
``parse_float``, if specified, will be called with the string ``parse_float``, if specified, will be called with the string
of every JSON float to be decoded. By default this is equivalent to of every JSON float to be decoded. By default this is equivalent to
float(num_str). This can be used to use another datatype or parser float(num_str). This can be used to use another datatype or parser
...@@ -309,6 +318,11 @@ class JSONDecoder(object): ...@@ -309,6 +318,11 @@ class JSONDecoder(object):
This can be used to raise an exception if invalid JSON numbers This can be used to raise an exception if invalid JSON numbers
are encountered. are encountered.
If ``strict`` is false (true is the default), then control
characters will be allowed inside strings. Control characters in
this context are those with character codes in the 0-31 range,
including ``'\\t'`` (tab), ``'\\n'``, ``'\\r'`` and ``'\\0'``.
""" """
self.object_hook = object_hook self.object_hook = object_hook
self.parse_float = parse_float or float self.parse_float = parse_float or float
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment