mirror of
https://github.com/php-win-ext/phpy.git
synced 2026-03-24 17:02:15 +01:00
148 lines
3.6 KiB
PHP
148 lines
3.6 KiB
PHP
<?php
|
|
namespace python;
|
|
|
|
/**
|
|
JSON (JavaScript Object Notation) <https://json.org> is a subset of
|
|
JavaScript syntax (ECMA-262 3rd edition) used as a lightweight data
|
|
interchange format.
|
|
|
|
:mod:`json` exposes an API familiar to users of the standard library
|
|
:mod:`marshal` and :mod:`pickle` modules. It is derived from a
|
|
version of the externally maintained simplejson library.
|
|
|
|
Encoding basic Python object hierarchies::
|
|
|
|
>>> import 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('\u1234'))
|
|
"\u1234"
|
|
>>> print(json.dumps('\\'))
|
|
"\\"
|
|
>>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
|
|
{"a": 0, "b": 0, "c": 0}
|
|
>>> from io import StringIO
|
|
>>> io = StringIO()
|
|
>>> json.dump(['streaming API'], io)
|
|
>>> io.getvalue()
|
|
'["streaming API"]'
|
|
|
|
Compact encoding::
|
|
|
|
>>> import json
|
|
>>> mydict = {'4': 5, '6': 7}
|
|
>>> json.dumps([1,2,3,mydict], separators=(',', ':'))
|
|
'[1,2,3,{"4":5,"6":7}]'
|
|
|
|
Pretty printing::
|
|
|
|
>>> import json
|
|
>>> print(json.dumps({'4': 5, '6': 7}, sort_keys=True, indent=4))
|
|
{
|
|
"4": 5,
|
|
"6": 7
|
|
}
|
|
|
|
Decoding JSON::
|
|
|
|
>>> import json
|
|
>>> obj = ['foo', {'bar': ['baz', None, 1.0, 2]}]
|
|
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]') == obj
|
|
True
|
|
>>> json.loads('"\\"foo\\bar"') == '"foo\x08ar'
|
|
True
|
|
>>> from io import StringIO
|
|
>>> io = StringIO('["streaming API"]')
|
|
>>> json.load(io)[0] == 'streaming API'
|
|
True
|
|
|
|
Specializing JSON object decoding::
|
|
|
|
>>> import 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 json
|
|
>>> def encode_complex(obj):
|
|
... if isinstance(obj, complex):
|
|
... return [obj.real, obj.imag]
|
|
... raise TypeError(f'Object of type {obj.__class__.__name__} '
|
|
... f'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 json.tool from the shell to validate and pretty-print::
|
|
|
|
$ echo '{"json":"obj"}' | python -m json.tool
|
|
{
|
|
"json": "obj"
|
|
}
|
|
$ echo '{ 1.2:3.4}' | python -m json.tool
|
|
Expecting property name enclosed in double quotes: line 1 column 3 (char 2)
|
|
*/
|
|
class json{
|
|
/**
|
|
* @return json
|
|
*/
|
|
public static function import()
|
|
{
|
|
return \PyCore::import('json');
|
|
}
|
|
|
|
public $__author__ = "Bob Ippolito <bob@redivi.com>";
|
|
public $__name__ = "json";
|
|
public $__package__ = "json";
|
|
public $__version__ = "2.0.9";
|
|
|
|
public $JSONDecodeError = null;
|
|
public $JSONDecoder = null;
|
|
public $JSONEncoder = null;
|
|
public $__path__ = null;
|
|
public $_default_decoder = null;
|
|
public $_default_encoder = null;
|
|
public $codecs = null;
|
|
public $decoder = null;
|
|
public $encoder = null;
|
|
public $scanner = null;
|
|
|
|
public function detect_encoding($b)
|
|
{
|
|
}
|
|
|
|
public function dump($obj, $fp)
|
|
{
|
|
}
|
|
|
|
public function dumps($obj)
|
|
{
|
|
}
|
|
|
|
public function load($fp)
|
|
{
|
|
}
|
|
|
|
public function loads($s)
|
|
{
|
|
}
|
|
|
|
}
|