summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2010-10-15 17:03:02 (GMT)
committerGeorg Brandl <georg@python.org>2010-10-15 17:03:02 (GMT)
commitd4460aaacdae40505a4645a73c021bfc810c9cb3 (patch)
treefbbeb729281e3db6bd5f013ceb6adf82cfd8339c
parentb67878a522a1686032d8ed4827438ede36068fe4 (diff)
downloadcpython-d4460aaacdae40505a4645a73c021bfc810c9cb3.zip
cpython-d4460aaacdae40505a4645a73c021bfc810c9cb3.tar.gz
cpython-d4460aaacdae40505a4645a73c021bfc810c9cb3.tar.bz2
#4785: document strict argument of JSONDecoder, plus add object_pairs_hook in the docstrings.
-rw-r--r--Doc/library/json.rst11
-rw-r--r--Lib/json/__init__.py24
-rw-r--r--Lib/json/decoder.py14
3 files changed, 42 insertions, 7 deletions
diff --git a/Doc/library/json.rst b/Doc/library/json.rst
index 3b203a2..a26001d 100644
--- a/Doc/library/json.rst
+++ b/Doc/library/json.rst
@@ -149,7 +149,7 @@ Basic Usage
To use a custom :class:`JSONEncoder` subclass (e.g. one that overrides 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)
@@ -195,8 +195,8 @@ Basic Usage
are encountered.
To use a custom :class:`JSONDecoder` subclass, specify it with the ``cls``
- kwarg. Additional keyword arguments will be passed to the constructor of the
- class.
+ kwarg; otherwise :class:`JSONDecoder` is used. Additional keyword arguments
+ 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)
@@ -275,6 +275,11 @@ Encoders and decoders
``'false'``. This can be used to raise an exception if invalid JSON numbers
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)
diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py
index 5d8cb19..d71c2ce 100644
--- a/Lib/json/__init__.py
+++ b/Lib/json/__init__.py
@@ -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
``.default()`` method to serialize additional types), specify it with
- the ``cls`` kwarg.
+ the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
"""
# cached encoder
@@ -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
``.default()`` method to serialize additional types), specify it with
- the ``cls`` kwarg.
+ the ``cls`` kwarg; otherwise ``JSONEncoder`` is used.
"""
# cached encoder
@@ -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
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``
- kwarg.
+ kwarg; otherwise ``JSONDecoder`` is used.
"""
return loads(fp.read(),
@@ -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
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
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
@@ -280,7 +296,7 @@ def loads(s, encoding=None, cls=None, object_hook=None, parse_float=None,
are encountered.
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
diff --git a/Lib/json/decoder.py b/Lib/json/decoder.py
index 6596154..5747fa6 100644
--- a/Lib/json/decoder.py
+++ b/Lib/json/decoder.py
@@ -294,6 +294,15 @@ class JSONDecoder(object):
place of the given ``dict``. This can be used to provide custom
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
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
@@ -309,6 +318,11 @@ class JSONDecoder(object):
This can be used to raise an exception if invalid JSON numbers
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.parse_float = parse_float or float