>>> from env_helper import info; info()
页面更新时间: 2024-01-17 15:38:30
运行环境:
Linux发行版本: Debian GNU/Linux 12 (bookworm)
操作系统内核: Linux-6.1.0-17-amd64-x86_64-with-glibc2.36
Python版本: 3.11.2
4.4. json
模块¶
Python的 json
模块处理了 JSON
数据字符串 和 Python
值之间转换的所有细节,得到了 json.loads()
和json.dumps()
函数。 JSON
不能存储每一种 Python
值,它只能
包含以下数据类型的值:字符串、整型、浮点型、 布尔型、列表、字典和
NoneType
。 JSON
不能表示Python特有的对象,如 File
对象、
CSV Reader
或 Writer
对象 、Regex
对象 或
Selenium WebElement
对象。
4.4.1. 用 loads()
函数读取 JSON
¶
要将包含 JSON
数据的字符串转换为 Python
的值, 就将它传递给
json.loads()
函数(这个名字的意思是 load string
,而不是
loads
)。 在交互式环境中输入以下代码:
>>> stringOfJsonData = '{"name": "Zophie", "isCat": true, "miceCaught":0,"felinelQ": null}'
>>> import json
>>> jsonDataAsPythonValue = json.loads(stringOfJsonData)
>>> jsonDataAsPythonValue
{'name': 'Zophie', 'isCat': True, 'miceCaught': 0, 'felinelQ': None}
>>> type(jsonDataAsPythonValue)
dict
导入 json
模块后,就可以调用 loads()
,向它传入一个 JSON
数据字符串。请注意, JSON
字符串总是用双引号。 它将该数据返回为一个
Python
字典。 Python
字典是 没有顺序的,所以如果打印
jsonDataAsPythonValue
, 键-值对可能以不同的顺序出现。
4.4.2. 用 dumps
函数写出 JSON
¶
json.dumps()
函数(它表示 dump string
,而不是 dumps
)将一个 Python
值转换成 JSON
格式的数据字符串。
在交互式环境中输入以下代码:
>>> pythonValue = {'isCat': True, 'miceCaught': 0, 'name':'Zophie','felinelQ': None}
>>> import json
>>> stringOfJsonData = json.dumps(pythonValue)
>>> stringOfJsonData
'{"isCat": true, "miceCaught": 0, "name": "Zophie", "felinelQ": null}'
>>> type(stringOfJsonData)
str
该值只能是以下基本 Python
数据类型之一:字典、
列表、整型、浮点型、字符串、布尔型或 None
。
4.4.3. Python3 JSON
数据解析¶
JSON (JavaScript Object Notation) 是一种轻量级的数据 交换格式。它基于ECMAScript的一个子集。
Python3 中可以使用 json 模块来对 JSON 数据进行编解码, 它包含了两个函数:
json.dumps()
: 对数据进行编码。json.loads()
: 对数据进行解码。
在json的编解码过程中,python 的原始类型与 json
类型
会相互转换,具体的转化对照如下:
Python 编码为 JSON
类型转换对应表:
Python |
JSON |
---|---|
dict |
object |
list, tuple |
array |
str |
string |
int, float, int- & float-derived Enums |
number |
True |
true |
False |
false |
None |
null |
JSON
解码为 Python 类型转换对应表:
JSON |
Python |
---|---|
object |
dict |
array |
list |
string |
str |
number (int) |
int |
number (real) |
float |
true |
True |
false |
False |
null |
None |
4.4.4. json.dumps
与 json.loads
实例¶
以下实例演示了 Python 数据结构转换为 JSON
:
>>> import json
Python 字典类型转换为 JSON 对象:
>>> data = {
>>> 'no' : 1,
>>> 'name' : 'OSGeo中国分会',
>>> 'url' : 'https://www.osego.com'
>>> }
>>>
>>> json_str = json.dumps(data)
>>> print ("Python 原始数据:", repr(data))
>>> print ("JSON 对象:", json_str)
Python 原始数据: {'no': 1, 'name': 'OSGeo中国分会', 'url': 'https://www.osego.com'} JSON 对象: {"no": 1, "name": "OSGeou4e2du56fdu5206u4f1a", "url": "https://www.osego.com"}
通过输出的结果可以看出,简单类型通过编码后 跟其原始的 repr()
输出结果非常相似。
接着以上实例,我们可以将一个 JSON
编码的字符串转换回一个 Python
数据结构:
将 JSON 对象转换为 Python 字典:
>>> data2 = json.loads(json_str)
>>> print ("data2['name']: ", data2['name'])
>>> print ("data2['url']: ", data2['url'])
data2['name']: OSGeo中国分会
data2['url']: https://www.osego.com
如果你要处理的是文件而不是字符串,你可以使用 json.dump()
和
json.load()
来编码和 解码JSON
数据。例如:
>>> # 写入 JSON 数据
>>> with open('xx_data.json', 'w') as f:
>>> json.dump(data, f)
>>>
>>> # 读取数据
>>> with open('xx_data.json', 'r') as f:
>>> data = json.load(f)
>>> print(data)
{'no': 1, 'name': 'OSGeo中国分会', 'url': 'https://www.osego.com'}