一. 什么是JSON?
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写。前端和后端进行数据交互,其实就是JS和Python进行数据交互。
JSON格式,需要注意事项:
(1)名称必须用双引号(即:””)来包络;
(2)值可以是双引号包括的字符串、数字、true、false、null、JavaScript数组,或子对象;
二. Python数据类型与json数据类型的映射关系
Python 中的数据类型 | JSON 数据格式中的数据类型描述 |
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
{
"obj": { # 对象
"name": "xxx", # 字符串
"address": { # 子对象
"country": "china",
"city": "TianJin"
}
},
"arr_simple": [1, 2, 3, 5], # 数组1
"arr_complex": [ # 数组2
1, # 数字
"a", # 字符串
{
"b": "yyy"
},
true, # 布尔
null # null 类型
],
"str": "I am a string", # 字符串
"num": 888, # 数字
"booValue": false,
"nullValue": null
}
三. JSON格式中的常用的方法
在使用json这个模块前,首先要导入json库:import json。
json.dumps()
json.dumps() 方法的作用就是将 python 对象转换成 JSON 字符串,下面来看具体的函数声明:
例子:
>>> 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}
json.dump()
json.dump() 函数的作用就是将 python 对象转换成 JSON 字符串,并将其通过 fp 文件流写入到文件中。来看下具体的函数声明:
>>> import json
>>> from io import StringIO
>>> io = StringIO()
>>> json.dump(['streaming API'], io)
>>> io.getvalue()
'["streaming API"]'
json.loads()
这个方法的作用就是将参数 s 按照上面的对照表反序列化为一个 python 对象。参数 s 可以是 str ,byte 或者byteArray 格式, 但必须要包含 JSON 文本才可以)。
'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
>>> import json
>>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
['foo', {'bar': ['baz', None, 1.0, 2]}]
>>> json.loads('"\\"foo\\bar"')
'"foo\x08ar'
>>> import decimal
>>> json.loads('1.1', parse_float=decimal.Decimal)
Decimal('1.1')
json.load()
先来看函数声明:
作用是将 fp 文件流反序列化为 python 对象,其中的参数意义和 loads 方法相同。来看一个例子。
>>> import json
>>> from io import StringIO
>>> io = StringIO('["streaming API"]')
>>> json.load(io)
['streaming API']
四. Python 生成JSON格式举例
import json
article_info = {}
data = json.loads(json.dumps(article_info))
data['article1'] = 'NONE'
article2 = {'title': 'python基础', 'publish_time': '2019-4-1', 'writer': {}}
data['article2'] = article2
writer = {'name': '李先生', 'sex': '男', 'email': 'xxx@gmail.com'}
data['article2']['writer'] = writer
article = json.dumps(data, ensure_ascii=False)
print(article)