>>> 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 值,它只能 包含以下数据类型的值:字符串、整型、浮点型、 布尔型、列表、字典和 NoneTypeJSON 不能表示Python特有的对象,如 File 对象、 CSV ReaderWriter 对象 、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.dumpsjson.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'}