8.22. json 模块 API 文档

8.22.1. API

def loads(json:str)->dict:...
def dumps(d:dict)->str:...

8.22.2. Examples

8.22.2.1. json_dumps.py

import json

s0 = json.dumps(1)

s1 = json.dumps({"a": 1, "b": 2, "c": 3})
print(s1)

s2 = json.dumps(
    {
        "a": 1,
        "b": 2,
        "c": 3,
        "d": {
            "e": 4,
            "f": 5
        }
    }
)
print(s2)

s3 = json.dumps(
    {
        "a": 1,
        "b": 2,
        "c": 3,
        "d": {
            "e": 4,
            "f": 5
        },
        "g": [
            6,
            7,
            8
        ]
    }
)
print(s3)

s4 = json.dumps(
    {
        "a": 1,
        "b": 2,
        "c": 3,
        "d": {
            "e": 4,
            "f": 5
        },
        "g": [
            6,
            7,
            8
        ],
        "h": None,
        "i": False,
        "j": True,
        "k": "string",
        "l": 1.234
    }
)
print(s4)

8.22.2.2. json_loads.py

import json

res = json.loads('{"x": 1}')
assert res['x'] == 1

res = json.loads('{"a": 1, "b": 2, "c": 3}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3

res = json.loads('{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5

res = json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8]}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8

res = json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None

res = json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False

res = json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false, "j": true}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False
assert res['j'] is True

res = json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false, "j": true, "k": "string"}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False
assert res['j'] is True
assert res['k'] == 'string'

res = json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false, "j": true, "k": "string", "l": 1.234}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False
assert res['j'] is True
assert res['k'] == 'string'
assert res['l'] == 1.234


# Testing empty object and empty array using type and len
res = json.loads('{}')
assert type(res) == dict
assert len(res) == 0

res = json.loads('[]')
assert type(res) == list
assert len(res) == 0

res = json.loads('{"a": {}}')
assert type(res['a']) == dict
assert len(res['a']) == 0

res = json.loads('{"a": []}')
assert type(res['a']) == list
assert len(res['a']) == 0

res = json.loads('{"a": 1, "b": {}, "c": []}')
assert res['a'] == 1
assert type(res['b']) == dict
assert len(res['b']) == 0
assert type(res['c']) == list
assert len(res['c']) == 0

res = json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": {}}, "g": [6, {}, 8], "h": null, "i": false, "j": true, "k": "string", "l": 1.234}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert type(res['d']['f']) == dict
assert len(res['d']['f']) == 0
assert res['g'][0] == 6
assert type(res['g'][1]) == dict
assert len(res['g'][1]) == 0
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False
assert res['j'] is True
assert res['k'] == 'string'
assert res['l'] == 1.234
print('PASS')

8.22.2.3. json_err.py

import json
# test parse failure

try:
    json.loads('{')
except:
    print('FAIL')

try:
    json.loads('{"a":1,}')
except:
    print('FAIL')

try:
    json.loads('{"a":1,')
except:
    print('FAIL')

try:
    json.loads('{"a":1, "b":}')
except:
    print('FAIL')

try:
    json.loads('{"a":1, "b":, "c":3}')
except:
    print('FAIL')

try:
    json.loads('{"a":1 "b":2}')
except:
    print('FAIL')

try:
    json.loads('{"a":1, "b":2, "c":3,}')
except:
    print('FAIL')

try:
    json.loads('{"a":1, "b"2, "c":3}')
except:
    print('FAIL')

8.22.2.4. json_issue1.py

import json
data = '{"code": 0,"path": "act_mode_config", "act_mode": [["ACTUATOR_NAME","ACTUATOR_ID","ACTUATOR_MODE_NAME","ACTUATOR_MODE_ID","ACT_MODE_TYPE","ACT_VALUE_TIME_s"],["电机1","actuator123","开闭循环1","mode2345","loop","{\\"AC_VALUE\\":1,\\"ACT_TIME_s\\":300}"],["电机1","actuator123","常开","mode2346","always","{\\"AC_VALUE\\":1,\\"ACT_TIME_s\\"}:0"]],"ext": "data"}'

print(data)
json_data = json.loads(data)
ACT_VALUE_TIMS_S = json_data['act_mode'][1][5]
print(ACT_VALUE_TIMS_S)
act_value_tims_json = json.loads(ACT_VALUE_TIMS_S)
print(act_value_tims_json['ACT_TIME_s'])
act_time_s = act_value_tims_json['ACT_TIME_s']

8.22.2.5. json_speed.py

import json
import time

dict_test = {'widget0': {"type": "div", "attributes": {"class": "container", "style": {"width": 240, "height": 240, "margin": 0, "padding": 0, "border-radius": 0, "border-width": 0, "border-color": "red", "background-color": 37864}}, "nodes": [{"type": "text", "attributes": {"font-size": "30", "class": "result-text", "style": {"top": 5, "left": 5, "width": 220, "text-align": "right", "height": 30, "color": "white", "text-overflow": "longbreak", "border-width": 0, "border-color": "red", "background-color": "transparent"}}, "nodes": [], "bindings":[{"attrName": "text", "key": "result", "isText": True}], "events": [], "value":"0", "widgetName":"widget1"}, {"type": "div", "attributes": {"class": "key-wrapper", "onclick": "onclick", "style": {"width": 60, "height": 50, "border-width": 0, "border-color": "red", "background-color": "transparent", "top": 40, "left": 10}}, "nodes": [{"type": "text", "attributes": {"font-size": "30", "class": "key", "style": {"left": 0, "top": 0, "width": 50, "height": 40, "margin": 0, "padding": 0, "color": "white", "font-size": 30, "text-align": "center", "background-color": "transparent"}}, "nodes": [], "bindings":[], "events":[], "value":"1", "widgetName":"widget3"}], "bindings":[], "events":[{"onclick": "onclick"}], "widgetName": "widget2"}, {"type": "div", "attributes": {"class": "key-wrapper", "onclick": "onclick", "style": {"width": 60, "height": 50, "border-width": 0, "border-color": "red", "background-color": "transparent", "top": 40, "left": 60}}, "nodes": [{"type": "text", "attributes": {"font-size": "30", "class": "key", "style": {
    "left": 0, "top": 0, "width": 50, "height": 40, "margin": 0, "padding": 0, "color": "white", "font-size": 30, "text-align": "center", "background-color": "transparent"}}, "nodes": [], "bindings":[], "events":[], "value":"2", "widgetName":"widget5"}], "bindings":[], "events":[{"onclick": "onclick"}], "widgetName": "widget4"}, {"type": "div", "attributes": {"class": "key-wrapper", "onclick": "onclick", "style": {"width": 60, "height": 50, "border-width": 0, "border-color": "red", "background-color": "transparent", "top": 40, "left": 110}}, "nodes": [{"type": "text", "attributes": {"font-size": "30", "class": "key", "style": {"left": 0, "top": 0, "width": 50, "height": 40, "margin": 0, "padding": 0, "color": "white", "font-size": 30, "text-align": "center", "background-color": "transparent"}}, "nodes": [], "bindings":[], "events":[], "value":"3", "widgetName":"widget7"}], "bindings":[], "events":[{"onclick": "onclick"}], "widgetName": "widget6"}, {"type": "div", "attributes": {"class": "key-wrapper", "onclick": "onclick", "style": {"width": 60, "height": 50, "border-width": 0, "border-color": "red", "background-color": "transparent", "top": 40, "left": 160}}, "nodes": [{"type": "text", "attributes": {"font-size": "30", "class": "key", "style": {"left": 0, "top": 0, "width": 50, "height": 40, "margin": 0, "padding": 0, "color": "white", "font-size": 30, "text-align": "center", "background-color": "transparent"}}, "nodes": [], "bindings":[], "events":[], "value":"+", "widgetName":"widget9"}], "bindings":[], "events":[{"onclick": "onclick"}], "widgetName": "widget8"}], "bindings": [], "events": [], "widgetName": "widget0"}}

json.CONFIG_USING_CJSON = True
print('dict_test:', dict_test)
json_test = json.dumps(dict_test)
print('json_test:', json_test)

json.CONFIG_USING_CJSON = True
start = time.tick_ms()
for i in range(10):
    res = json.loads(json_test)
str_res_cjson = str(res)
print('len(str_res_cjson):', len(str_res_cjson))
end = time.tick_ms()
time_cjson_loads = end - start
print('loads: cjson:', time_cjson_loads, 'ms')

json.CONFIG_USING_CJSON = False
start = time.tick_ms()
for i in range(10):
    res = json.loads(json_test)
str_res_jsmn = str(res)
print('len(str_res_jsmn):', len(str_res_jsmn))
end = time.tick_ms()
time_jsmn_loads = end - start

print('loads: jsmn:', time_jsmn_loads, 'ms')

# test for dumps

# test for dumps

json.CONFIG_USING_CJSON = True
start = time.tick_ms()
for i in range(10):
    res = json.dumps(dict_test)
len_res_cjson = len(res)
print('len(res_cjson):', len_res_cjson)
end = time.tick_ms()
time_cjson_dumps = end - start
print('dumps: cjson:', time_cjson_dumps, 'ms')

json.CONFIG_USING_CJSON = False
start = time.tick_ms()
for i in range(10):
    res = json.dumps(dict_test)
len_res_jsmn = len(res)
print('len(res_jsmn):', len_res_jsmn)
end = time.tick_ms()
time_jsmn_dumps = end - start
print('dumps: jsmn:', time_jsmn_dumps, 'ms')

print('==================================================')
print('loads: jsmn is', (time_cjson_loads /
      time_jsmn_loads), 'times faster than cjson')
print('dumps: jsmn is', (time_cjson_dumps /
      time_jsmn_dumps), 'times faster than cjson')

8.22.2.6. _json_loads.py

import _json

res = _json.loads('{"a": 1, "b": 2, "c": 3}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3

res = _json.loads('{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5

res = _json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8]}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8

res = _json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None

res = _json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False

res = _json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false, "j": true}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False
assert res['j'] is True

res = _json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false, "j": true, "k": "string"}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False
assert res['j'] is True
assert res['k'] == 'string'

res = _json.loads(
    '{"a": 1, "b": 2, "c": 3, "d": {"e": 4, "f": 5}, "g": [6, 7, 8], "h": null, "i": false, "j": true, "k": "string", "l": 1.234}')
assert res['a'] == 1
assert res['b'] == 2
assert res['c'] == 3
assert res['d']['e'] == 4
assert res['d']['f'] == 5
assert res['g'][0] == 6
assert res['g'][1] == 7
assert res['g'][2] == 8
assert res['h'] is None
assert res['i'] is False
assert res['j'] is True
assert res['k'] == 'string'
assert res['l'] == 1.234
print('PASS')