Skip to main content

json

json 模块

Python 字典 (Dict) 和 JSON 字符串 (String) 是导致校验失败的最常见原因。

特性Python 字典 (Dict)JSON 字符串 (String)
引号单引号 '或 双引号 "均可必须使用双引号 "
布尔值True/False(首字母大写)true/false(全小写)
空值Nonenull
末尾逗号允许有额外逗号 {"a":1,}严禁有末尾逗号 {"a":1}
数据类型可以存 Python 对象(如 datetime只能是字符串、数字、数组、对象等基本类型

如果你希望传输一个对象,键为 A ,值为 1'"2可以写为 {"A":"1'\"2"},其中\是转义字符,和Python一致。

json 模块提供了 python->json 以及 json->python 两种格式,转换规则如下

JSON ->Python ->JSON
object -- 对象dictobject -- 对象
arraylistarray
stringstrstring
number (int)intnumber
number (real)floatnumber
trueTruetrue
falseFalsefalse
nullNonenull
tuplearray

注意:JSON 中的键-值对中的键永远是 str 类型的。当一个对象被转化为 JSON 时,字典中所有的键都会被强制转换为字符串。这所造成的结果是字典被转换为 JSON 然后转换回字典时可能和原来的不相等。

换句话说,如果 x 具有非字符串的键,则有 loads(dumps(x)) != x。

json 模块还有一些其他参数可以控制:编码形式、格式化输出等,不过很少用到

json 官方模块文档

json.load 与 json.dump

json.load 与 json.dump 是基于文件的转换。

import json

data = {
"name": "Satyam kumar",
"place": "patna",
"skills": [
"Raspberry pi",
"Machine Learning",
"Web Development"
],
"email": "xyz@gmail.com",
"projects": [
"Python Data Mining",
"Python Data Science"
]
}
with open("data_file.json", "w") as write:
json.dump(data, write)

with open("data_file.json", "r") as read_content:
print(json.load(read_content))

json.loads 与 json.dumps

json.loadsjson.dumps 是直接基于数据的转换,这里的s表示string(字符串)。

import json

# JSON string:
# Multi-line string
data = """{
"Name": "Jennifer Smith",
"Contact Number": 7867567898,
"Email": "jen123@gmail.com",
"Hobbies":["Reading", "Sketching", "Horse Riding"]
}"""

# parse data:
res_p = json.loads(data)
print(type(res_p)) # <class 'dict'>

res_j = json.dumps(res_p)
print(type(res_j)) # <class 'str'>