Python中JSON字符串转JSON对象/类对象

JSON字符串和JSON对象互转

字符串转对象

1
2
3
4
5
6
7
8
9
10
import json

# 一些 JSON:
x = '{ "name":"Bill", "age":63, "city":"Seatle"}'

# 解析 x:
y = json.loads(x)

# 结果是 Python 字典:
print(y["age"])

对象转字符串

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import json

# Python 对象(字典):
x = {
"name": "Bill",
"age": 63,
"city": "Seatle"
}

# 转换为 JSON:
y = json.dumps(x)

# 结果是 JSON 字符串:
print(y)

类型映射

当 Python 转换为 JSON时,Python 对象会被转换为 JSON(JavaScript)等效项:

Python JSON
dict Object
list Array
tuple Array
str String
int Number
float Number
True true
False false
None null

JSON和class转换

安装

1
pip install pydantic

简单示例

1
2
3
4
5
6
7
8
9
10
11
12
13
from datetime import datetime
from typing import List, Optional
from pydantic import BaseModel

class User(BaseModel):
id: int
name: str = 'John Doe'
signup_ts: Optional[datetime] = None
friends: List[int] = []

external_data = {'id': '123', 'signup_ts': '2017-06-01 12:22', 'friends': [1, '2', b'3']}
user = User(**external_data)
print(user)

树状数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import json
from typing import List, Optional

from pydantic import BaseModel


class TreeNode(BaseModel):
name: str
children: Optional[List['TreeNode']] = None


# 将 JSON 字符串解析为树状结构
json_str = '''
{
"name": "root",
"children": [
{
"name": "child1",
"children": [
]
},
{
"name": "child2",
"children": []
}
]
}
'''

# 使用 pydantic 解析 JSON
json_obj = json.loads(json_str)
tree = TreeNode(
**json_obj
)

print(tree.name) # 输出: root
print(tree.children[0].name) # 输出: child1

# 将树状结构转换为 JSON 字符串
json_str = tree.model_dump_json(indent=4)
print(json_str)

列表数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import json
from pydantic import BaseModel

# 定义 Pydantic 模型
class User(BaseModel):
name: str
age: int

# JSON 字符串
json_string = '[{"name": "Alice", "age": 30}, {"name": "Bob", "age": 25}]'

# 解析 JSON 字符串
data = json.loads(json_string)

# 创建 Pydantic 对象
users = [User(**item) for item in data]

# 打印结果
for user in users:
print(user)

转python中的dict

1
obj.model_dump()

转JSON字符串

1
json_str = obj.model_dump_json(indent=4)