Python的JSON中方法及JSONPath模块用法分析
什么是JSON
JSON全称JavaScript Object Notation,是一种轻量级的数据交换格式。其特点是易于理解、易于编写、易于解析,同时也易于机器生成和解析。在Web应用程序中,JSON数据格式使用非常广泛,被用于前后端数据交互。
Python处理JSON数据的方法
Python标准库中内置了处理JSON数据的模块——json。这个模块提供了四个操作JSON数据的函数:
json.dumps()
将Python数据类型转换为JSON格式的字符串。
import json
data = {"name":"Jack", "age": 18}
json_str = json.dumps(data)
print(json_str)
# 输出:{"name": "Jack", "age": 18}
json.loads()
将JSON格式的字符串转换为Python数据类型。
import json
json_str = '{"name": "Jack", "age": 18}'
data = json.loads(json_str)
print(data)
# 输出:{'name': 'Jack', 'age': 18}
json.dump()
将Python数据类型以JSON格式写入文件。
import json
data = {"name":"Jack", "age": 18}
with open("data.json", "w") as f:
json.dump(data, f)
json.load()
将JSON格式的文件读取为Python数据类型。
import json
with open("data.json", "r") as f:
data = json.load(f)
print(data)
# 输出:{'name': 'Jack', 'age': 18}
JSONPath模块
JSONPath是一种类似于XPath的语言,被用来从JSON结构中提取数据。JSONPath模块提供了JSONPath的实现。
安装JSONPath模块
可以通过pip安装JSONPath模块。
pip install jsonpath
JSONPath表达式
JSONPath表达式的格式如下:
$.[key|index|keyname]...
其中$表示根节点,[key|index|keyname]表示要访问的节点,可以通过key、index、keyname来指定。例如:
import jsonpath
data = {
"store": {
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"title": "Sayings of the Century",
"price": 8.95
},
{
"category": "fiction",
"author": "Evelyn Waugh",
"title": "Sword of Honour",
"price": 12.99
}
],
"bicycle": {
"color": "red",
"price": 19.95
}
}
}
# 访问根节点,即整个JSON数据
result = jsonpath.jsonpath(data, "$")
# 输出:[{'store': {'book': [{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99}], 'bicycle': {'color': 'red', 'price': 19.95}}}]
# 访问store节点下的book节点下的第一个元素
result = jsonpath.jsonpath(data, "$.store.book[0]")
# 输出:[{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}]
# 访问store节点下的所有book节点下的作者(author)字段
result = jsonpath.jsonpath(data, "$.store.book[*].author")
# 输出:['Nigel Rees', 'Evelyn Waugh']
# 访问store节点下的所有节点
result = jsonpath.jsonpath(data, "$.store.*")
# 输出:[{'book': [{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99}], 'bicycle': {'color': 'red', 'price': 19.95}}]
# 访问store节点下的所有节点的值
result = jsonpath.jsonpath(data, "$.store..")
# 输出:[{'book': [{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99}], 'bicycle': {'color': 'red', 'price': 19.95}}, [{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99}], {'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99}, {'color': 'red', 'price': 19.95}, 'red', 19.95]
示例
假设有一份JSON格式的数据如下:
{
"name": "张三",
"age": 20,
"hobbies": [
"读书",
"旅游",
"游戏"
],
"address": {
"province": "广东",
"city": "深圳",
"detail": "XX街道XX号"
},
"school": [
{
"name": "清华大学",
"major": "计算机科学与技术",
"degree": "本科"
},
{
"name": "麻省理工学院",
"major": "电子工程",
"degree": "硕士"
}
]
}
例1:将JSON格式的数据转换为Python数据类型,并输出姓名和爱好
import json
with open("data.json", "r") as f:
data = json.load(f)
print("姓名:", data["name"])
print("爱好:")
for hobby in data["hobbies"]:
print(hobby)
输出结果为:
姓名: 张三
爱好:
读书
旅游
游戏
例2:使用JSONPath提取数据
import json
import jsonpath
with open("data.json", "r") as f:
data = json.load(f)
# 输出年龄和详细地址
age = jsonpath.jsonpath(data, "$.age")[0]
province = jsonpath.jsonpath(data, "$.address.province")[0]
city = jsonpath.jsonpath(data, "$.address.city")[0]
detail = jsonpath.jsonpath(data, "$.address.detail")[0]
print("年龄:", age)
print("详细地址:", province + city + detail)
# 输出学校名称和专业
schools = jsonpath.jsonpath(data, "$.school[*]")
for school in schools:
print("学校名称:", school["name"])
print("专业:", school["major"])
print()
输出结果为:
年龄: 20
详细地址: 广东深圳XX街道XX号
学校名称: 清华大学
专业: 计算机科学与技术
学校名称: 麻省理工学院
专业: 电子工程
通过以上两个示例我们可以看到,Python的json模块简单易用,使用jsonpath提取JSON数据更加方便快捷。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python的json中方法及jsonpath模块用法分析 - Python技术站