§ <ˆjÉ[ãó—dZddlmZdZgd¢ZdZddlmZddlm Z dd l m Z dd l m Z dd lmZmZd „Ze¦«Zd „Ze¦«a dd„Z dd„Ze ¦«a dd„Z dd„Zd„Zd„ZdS)aûJSON (JavaScript Object Notation) 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 back to Python 2.5 and (currently) has significant performance advantages, even without using the optional C extension for speedups. 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": 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 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) >>> from decimal import Decimal >>> json.loads('1.1', parse_float=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('Object of type %s is not JSON serializable' % ... obj.__class__.__name__) ... >>> 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 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: line 1 column 3 (char 2) Parsing multiple documents serialized as JSON lines (newline-delimited JSON):: >>> import simplejson as json >>> def loads_lines(docs): ... for doc in docs.splitlines(): ... yield json.loads(doc) ... >>> sum(doc["count"] for doc in loads_lines('{"count":1}\n{"count":2}\n{"count":3}\n')) 6 Serializing multiple objects to JSON lines (newline-delimited JSON):: >>> import simplejson as json >>> def dumps_lines(objs): ... for obj in objs: ... yield json.dumps(obj, separators=(',',':')) + '\n' ... >>> ''.join(dumps_lines([{'count': 1}, {'count': 2}, {'count': 3}])) '{"count":1}\n{"count":2}\n{"count":3}\n' é)Úabsolute_importz3.19.1) ÚdumpÚdumpsÚloadÚloadsÚ JSONDecoderÚJSONDecodeErrorÚ JSONEncoderÚ OrderedDictÚ simple_firstÚRawJSONzBob Ippolito )ÚDecimalé)r )r )r)r ÚJSONEncoderForHTMLcóT—ddl} |jS#t$rddlm}|jcYSwxYw)Nrr)Ú ordered_dict)Ú collectionsr ÚAttributeErrorÚr)rrs úJ/opt/cloudlinux/venv/lib64/python3.11/site-packages/simplejson/__init__.pyÚ_import_OrderedDictrˆsX€ØÐÐÐð(ØÔ&Ð&øÝ ð(ð(ð(Ø"Ð"Ð"Ð"Ð"Ð"ØÔ'Ð'Ð'Ð'ð(øøøs † �'¦'có6— ddlm}|S#t$rYdSwxYw)Nr©Ú make_encoder)Ú _speedupsrÚ ImportErrorrs rÚ_import_c_make_encoderr‘sA€ðØ+Ð+Ð+Ð+Ð+Ð+ØÐøÝ ððð؈tˆtðøøøs ‚ Š —FTNúutf-8c ó|—|sE|rC|rA|s?|€=|€;|€9| dkr3| €1| r/| r-| r+|s)|s'|s%|s#|s!|s|€|st |¦«}nZ|€t}|did|“d|“d|“d|“d|“d|“d | “d | “d | “d | “d | “d|“d|“d|“d|“d|“d|“d|“|¤Ž |¦«}|D]}| |¦«ŒdS)a‚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``, ``int``, ``long``, ``float``, ``bool``, ``None``) will be skipped instead of raising a ``TypeError``. If *ensure_ascii* is false (default: ``True``), then the output may contain non-ASCII characters, so long as they do not need to be escaped by JSON. When it is true, all non-ASCII characters are escaped. If *allow_nan* is true (default: ``False``), then out of range ``float`` values (``nan``, ``inf``, ``-inf``) will be serialized to their JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``) instead of raising a ValueError. See *ignore_nan* for ECMA-262 compliant behavior. If *indent* is a string, then JSON array elements and object members will be pretty-printed with a newline followed by that string repeated for each level of nesting. ``None`` (the default) selects the most compact representation without any newlines. If specified, *separators* should be an ``(item_separator, key_separator)`` tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and ``(',', ': ')`` otherwise. To get the most compact JSON representation, you should specify ``(',', ':')`` to eliminate whitespace. *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``. If *use_decimal* is true (default: ``True``) then decimal.Decimal will be natively serialized to JSON with full precision. If *namedtuple_as_object* is true (default: ``True``), :class:`tuple` subclasses with ``_asdict()`` methods will be encoded as JSON objects. If *tuple_as_array* is true (default: ``True``), :class:`tuple` (and subclasses) will be encoded as JSON arrays. If *iterable_as_array* is true (default: ``False``), any object not in the above table that implements ``__iter__()`` will be encoded as a JSON array. If *bigint_as_string* is true (default: ``False``), ints 2**53 and higher or lower than -2**53 will be encoded as strings. This is to avoid the rounding that happens in Javascript otherwise. Note that this is still a lossy operation that will not round-trip correctly and should be used sparingly. If *int_as_string_bitcount* is a positive number (n), then int of size greater than or equal to 2**n or lower than or equal to -2**n will be encoded as strings. If specified, *item_sort_key* is a callable used to sort the items in each dictionary. This is useful if you want to sort items other than in alphabetical order by key. This option takes precedence over *sort_keys*. If *sort_keys* is true (default: ``False``), the output of dictionaries will be sorted by item. If *for_json* is true (default: ``False``), objects with a ``for_json()`` method will use the return value of that method for encoding as JSON instead of the object. If *ignore_nan* is true (default: ``False``), then out of range :class:`float` values (``nan``, ``inf``, ``-inf``) will be serialized as ``null`` in compliance with the ECMA-262 specification. If true, this will override *allow_nan*. To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the ``.default()`` method to serialize additional types), specify it with the ``cls`` kwarg. NOTE: You should use *default* or *for_json* instead of subclassing whenever possible. NrÚskipkeysÚ ensure_asciiÚcheck_circularÚ allow_nanÚindentÚ separatorsÚencodingÚdefaultÚ use_decimalÚnamedtuple_as_objectÚtuple_as_arrayÚiterable_as_arrayÚbigint_as_stringÚ sort_keysÚ item_sort_keyÚfor_jsonÚ ignore_nanÚint_as_string_bitcount©)Ú_default_encoderÚ iterencoder Úwrite)ÚobjÚfpr r!r"r#Úclsr$r%r&r'r(r)r*r,r-r.r/r0r1r+ÚkwÚiterableÚchunks rrršsâ€ðp ð"˜ð"Øð"Ø(ð"à ˆ ˜˜¨:Ð+=Ø�GÒР °K Ø ð!0Ø%3ð!0Øõ$×.Ò.¨sÑ3Ô3ˆˆà ˆ;݈CØ�3ð ð ð   ð °|°|ð Ø)˜>ð Ø5>°Yð ØGMÀvð à!�zð à,4¨Hð ð�Gð ð*5¨ð ð"6Ð!5ð ð *˜>ð ð 0Ð/ð ð.Ð-ð ð �ið ð(˜-ð ð�Xð ð"�zð ð$:Ð#9Øð ð ÷’*˜S‘/”/ð ð ððˆØ �Š�‰Œˆˆððóc óB—|sD|rB|r@|s>|€<|€:|€8|dkr2| €0| r.| r,| r*|s(| s&|s$|s"|s |s|€|st |¦«S|€t}|did|“d|“d|“d|“d|“d|“d |“d | “d | “d | “d | “d|“d| “d|“d|“d|“d|“d|“|¤Ž |¦«S)a,Serialize ``obj`` to a JSON formatted ``str``. If ``skipkeys`` is true then ``dict`` keys that are not basic types (``str``, ``int``, ``long``, ``float``, ``bool``, ``None``) will be skipped instead of raising a ``TypeError``. If *ensure_ascii* is false (default: ``True``), then the output may contain non-ASCII characters, so long as they do not need to be escaped by JSON. When it is true, all non-ASCII characters are escaped. 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 true (default: ``False``), then out of range ``float`` values (``nan``, ``inf``, ``-inf``) will be serialized to their JavaScript equivalents (``NaN``, ``Infinity``, ``-Infinity``) instead of raising a ValueError. See *ignore_nan* for ECMA-262 compliant behavior. If ``indent`` is a string, then JSON array elements and object members will be pretty-printed with a newline followed by that string repeated for each level of nesting. ``None`` (the default) selects the most compact representation without any newlines. For backwards compatibility with versions of simplejson earlier than 2.1.0, an integer is also accepted and is converted to a string with that many spaces. If specified, ``separators`` should be an ``(item_separator, key_separator)`` tuple. The default is ``(', ', ': ')`` if *indent* is ``None`` and ``(',', ': ')`` otherwise. To get the most compact JSON representation, you should specify ``(',', ':')`` to eliminate whitespace. ``encoding`` is the character encoding for bytes 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. If *use_decimal* is true (default: ``True``) then decimal.Decimal will be natively serialized to JSON with full precision. If *namedtuple_as_object* is true (default: ``True``), :class:`tuple` subclasses with ``_asdict()`` methods will be encoded as JSON objects. If *tuple_as_array* is true (default: ``True``), :class:`tuple` (and subclasses) will be encoded as JSON arrays. If *iterable_as_array* is true (default: ``False``), any object not in the above table that implements ``__iter__()`` will be encoded as a JSON array. If *bigint_as_string* is true (not the default), ints 2**53 and higher or lower than -2**53 will be encoded as strings. This is to avoid the rounding that happens in Javascript otherwise. If *int_as_string_bitcount* is a positive number (n), then int of size greater than or equal to 2**n or lower than or equal to -2**n will be encoded as strings. If specified, *item_sort_key* is a callable used to sort the items in each dictionary. This is useful if you want to sort items other than in alphabetical order by key. This option takes precedence over *sort_keys*. If *sort_keys* is true (default: ``False``), the output of dictionaries will be sorted by item. If *for_json* is true (default: ``False``), objects with a ``for_json()`` method will use the return value of that method for encoding as JSON instead of the object. If *ignore_nan* is true (default: ``False``), then out of range :class:`float` values (``nan``, ``inf``, ``-inf``) will be serialized as ``null`` in compliance with the ECMA-262 specification. If true, this will override *allow_nan*. To use a custom ``JSONEncoder`` subclass (e.g. one that overrides the ``.default()`` method to serialize additional types), specify it with the ``cls`` kwarg. NOTE: You should use *default* instead of subclassing whenever possible. Nrr r!r"r#r$r%r&r'r(r)r*r+r,r-r.r/r0r1r2)r3Úencoder )r6r r!r"r#r8r$r%r&r'r(r)r*r,r-r.r/r0r1r+r9s rrrs¼€ðx ð ,˜ð ,Øð ,Ø(ð ,à ˆ ˜˜¨:Ð+=Ø�GÒР °K Ø ð!0Ø%3ð!0Øõ ×&Ò& sÑ+Ô+Ð+Ø €{ÝˆØ ˆ3ð ð ð Ø�ð Ø(4¨ ð à%�~ð à1:°ð àCIÀ6ð ð�:ð ð)1¨ð ð;B¸'ð ð �Kð  ð 2Ð1ð  ð &�~ð  ð,Ð+ð ð*Ð)ð ð�)ð ð$�mð ð�ð ð�:ð ð 6Ð5Ø ð ð ÷Šf�S‰kŒkðr<c óT—t| ¦«f||||||||| dœ | ¤ŽS)ar Deserialize ``fp`` (a ``.read()``-supporting file-like object containing a JSON document as `str` or `bytes`) to a Python object. *encoding* determines the encoding used to interpret any `bytes` objects decoded by this instance (``'utf-8'`` by default). It has no effect when decoding `str` objects. *object_hook*, if specified, will be called with the result of every JSON object decoded and its return value will be used in place of the given :class:`dict`. This can be used to provide custom deserializations (e.g. to support JSON-RPC class hinting). *object_pairs_hook* is an optional function that will be called with the result of any object literal decode with an ordered list of pairs. The return value of *object_pairs_hook* will be used instead of the :class:`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, :func:`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 for JSON floats (e.g. :class:`decimal.Decimal`). *parse_int*, if specified, will be called with the string of every JSON int to be decoded. By default, this is equivalent to ``int(num_str)``. This can be used to use another datatype or parser for JSON integers (e.g. :class:`float`). *allow_nan*, if True (default false), will allow the parser to accept the non-standard floats ``NaN``, ``Infinity``, and ``-Infinity`` and enable the use of the deprecated *parse_constant*. If *use_decimal* is true (default: ``False``) then it implies parse_float=decimal.Decimal for parity with ``dump``. *parse_constant*, if specified, will be called with one of the following strings: ``'-Infinity'``, ``'Infinity'``, ``'NaN'``. It is not recommended to use this feature, as it is rare to parse non-compliant JSON containing these values. To use a custom ``JSONDecoder`` subclass, specify it with the ``cls`` kwarg. NOTE: You should use *object_hook* or *object_pairs_hook* instead of subclassing whenever possible. ) r&r8Ú object_hookÚ parse_floatÚ parse_intÚparse_constantÚobject_pairs_hookr(r#)rÚread) r7r&r8r@rArBrCrDr(r#r9s rrr‘sL€õf �—’‘”ð <ؘs° ب9Ø%Ð9Jب9ð  <ð <ð9;ð  <ð <ð¨SÔ->ˆŒØ+ˆÔØ'*Ô'Dð(+Ø Ô *ð Ô#à Ô/ÐG°4Ô3GˆÔÐàÔ*ˆŒØ!ˆÔØ&)Ô&DˆÔ#Ø Ô0ˆÔØÔ(€CÔå"‘}”}Ðå"‘}”}ÐÐÐr<cób—t|dtttf¦«|dfS)znHelper function to pass to item_sort_key to sort simple elements to the top, then container elements. rr)Ú isinstanceÚlistÚdictÚtuple)Úkvs rr r .s(€õ �r˜!”u�t¥T­5Ð1Ñ 2Ô 2°B°q´EÐ :Ð:r<)FTTFNNNrNTTTFFNFFNF) NNNNNNNFF)Ú__doc__Ú __future__rÚ __version__Ú__all__Ú __author__ÚdecimalrÚerrorsr Úraw_jsonr rLrrMr rrr rr3rrrGrrr]r r2r<rúrls½ððvðvðn'Ð&Ð&Ð&Ð&Ð&Ø€ ð ð ð €ð -€ àÐÐÐÐÐà#Ð#Ð#Ð#Ð#Ð#ØÐÐÐÐÐØ Ð Ð Ð Ð Ð Ø4Ð4Ð4Ð4Ð4Ð4Ð4Ð4ð(ð(ð(ð"Ð!Ñ#Ô#€ ðððð�;‘=”=ÐàDHØ<@Ø59Ø37Ø@DØBFØ ð wðwðwðwðtBFØ=AØ6:Ø48ØAEØCGØ!ð wðwðwðwðt�;‘=”=ÐðEIØ?CØ%*ð7<ð7<ð7<ð7<ðtEIØ?CØ%*ðJ2ðJ2ðJ2ðJ2ðZ%ð%ð%ð,;ð;ð;ð;ð;r<