Skip to content
Snippets Groups Projects
Select Git revision
  • branch/default-vms
  • master
  • felixonmars-patch-1-1
  • felixonmars-patch-1
  • fix-173
  • wild/4890788900eb713c68beb1452b00dac2f73c70a7
  • wheels
  • branch/default default protected
  • python2.2
  • docs-102
  • surrogate-62
  • ecma-262-63
  • for_json-69
  • py-backports
  • py3
  • item_sort_key
  • bigint_as_string-gh31
  • dict-subclass-gh26
  • namedtuple_duck-gh22
  • iterable_as_array-gh1
20 results

index.rst

Blame
  • index.rst 28.40 KiB

    :mod:`simplejson` --- JSON encoder and decoder

    JSON (JavaScript Object Notation) <http://json.org> is a subset of JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data interchange format.

    :mod:`simplejson` exposes an API familiar to users of the standard library :mod:`marshal` and :mod:`pickle` modules. It is the externally maintained version of the :mod:`json` library contained in Python 2.6, but maintains compatibility with Python 2.5 and (currently) has significant performance advantages, even without using the optional C extension for speedups. :mod:`simplejson` is also supported on Python 3.3+.

    Development of simplejson happens on Github: http://github.com/simplejson/simplejson

    Encoding basic Python object hierarchies:

    >>> import simplejson as json
    >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
    '["foo", {"bar": ["baz", null, 1.0, 2]}]'
    >>> print(json.dumps("\"foo\bar"))
    "\"foo\bar"
    >>> print(json.dumps(u'\u1234'))
    "\u1234"
    >>> print(json.dumps('\\'))
    "\\"
    >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
    {"a": 0, "b": 0, "c": 0}
    >>> from simplejson.compat import StringIO
    >>> io = StringIO()
    >>> json.dump(['streaming API'], io)
    >>> io.getvalue()
    '["streaming API"]'

    Compact encoding:

    >>> import simplejson as json
    >>> obj = [1,2,3,{'4': 5, '6': 7}]
    >>> json.dumps(obj, separators=(',', ':'), sort_keys=True)
    '[1,2,3,{"4":5,"6":7}]'

    Pretty printing:

    >>> import simplejson as json
    >>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4 * ' '))
    {
        "4": 5,
        "6": 7
    }

    Decoding JSON:

    >>> import simplejson as json
    >>> obj = [u'foo', {u'bar': [u'baz', None, 1.0, 2]}]
    >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
    True
    >>> json.loads('"\\"foo\\bar"') == u'"foo\x08ar'
    True
    >>> from simplejson.compat import StringIO
    >>> io = StringIO('["streaming API"]')
    >>> json.load(io)[0] == 'streaming API'
    True

    Using Decimal instead of float:

    >>> import simplejson as json
    >>> from decimal import Decimal
    >>> json.loads('1.1', use_decimal=True) == Decimal('1.1')
    True
    >>> json.dumps(Decimal('1.1'), use_decimal=True) == '1.1'
    True

    Specializing JSON object decoding:

    >>> import simplejson as json
    >>> def as_complex(dct):
    ...     if '__complex__' in dct:
    ...         return complex(dct['real'], dct['imag'])
    ...     return dct
    ...
    >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
    ...     object_hook=as_complex)
    (1+2j)
    >>> import decimal
    >>> json.loads('1.1', parse_float=decimal.Decimal) == decimal.Decimal('1.1')
    True

    Specializing JSON object encoding:

    >>> import simplejson as json
    >>> def encode_complex(obj):
    ...     if isinstance(obj, complex):
    ...         return [obj.real, obj.imag]
    ...     raise TypeError(repr(o) + " is not JSON serializable")
    ...
    >>> json.dumps(2 + 1j, default=encode_complex)
    '[2.0, 1.0]'
    >>> json.JSONEncoder(default=encode_complex).encode(2 + 1j)
    '[2.0, 1.0]'
    >>> ''.join(json.JSONEncoder(default=encode_complex).iterencode(2 + 1j))
    '[2.0, 1.0]'

    Using :mod:`simplejson.tool` from the shell to validate and pretty-print:

    $ echo '{"json":"obj"}' | python -m simplejson.tool
    {
        "json": "obj"
    }
    $ echo '{ 1.2:3.4}' | python -m simplejson.tool
    Expecting property name enclosed in double quotes: line 1 column 3 (char 2)