python - 如何从 Python 中的 JSON 文件生成索引列表?
问题描述
我正在尝试使用 jmespath 操作一个很大的 jsonfile。为此,我需要生成一个完整路径列表以用作参考,因为并非所有项目都需要。
这是一个示例 json:
data = {
"firstName": "Jane",
"lastName": "Doe",
"hobbies": ["running", "sky diving", "singing"],
"age": 35,
"children": [
{
"firstName": "Alice",
"age": 6,
"hobbies": ["swimming", "painting"]
},
{
"firstName": "Bob",
"age": 8,
"hobbies": ["video games", "soccer"]
}
]
}
我需要编写脚本来生成:
firstName.Jane
lastName.Doe
hobbies.running
hobbies.sky diving
hobbies.singing
age.35
children[0].firstname.Alice
children[0].age.6
children[0].hobbies.swimming
children[0].hobbies.painting
children[1].firstname.Bob
children[1].age.8
children[1].hobbies.video games
children[1].hobbies.soccer
JSON 的深度可能高达 3-4 级。一直在尝试几种选择,但无法解决如何实现这一目标......
解决方案
这应该适用于任何深度的 JSON(不考虑递归限制):
data = {
"firstName": "Jane",
"lastName": "Doe",
"hobbies": ["running", "sky diving", "singing"],
"age": 35,
"children": [
{
"firstName": "Alice",
"age": 6,
"hobbies": ["swimming", "painting"]
},
{
"firstName": "Bob",
"age": 8,
"hobbies": ["video games", "soccer"]
}
]
}
def traverese(d, current_key=''):
if isinstance(d, dict):
for k, v in d.items():
yield from traverese(v, current_key + k + '.')
elif isinstance(d, list):
for i, vv in enumerate(d):
yield from traverese(vv, current_key + '[' + str(i) + '].')
else:
yield current_key + str(d)
for index in traverese(data):
print(index)
印刷:
firstName.Jane
lastName.Doe
hobbies.[0].running
hobbies.[1].sky diving
hobbies.[2].singing
age.35
children.[0].firstName.Alice
children.[0].age.6
children.[0].hobbies.[0].swimming
children.[0].hobbies.[1].painting
children.[1].firstName.Bob
children.[1].age.8
children.[1].hobbies.[0].video games
children.[1].hobbies.[1].soccer
推荐阅读
- prolog - How to get full stop in this Prolog predicate?
- sql - 给定所需列的列表(存储的表变量),检查物理表中所需字段集列表中的任何空值
- merge - Time complexity of algorithm which merges a stack of linked lists
- scala - Scala Play Framework: Disable Browser Launch on localhost:9000 for Run Configuration
- r - Merging two data frames in R on date/time with no ID
- php - Page Content Not Showing in Wordpress
- c# - Why does the File and FileStream API fail to write binary data with no exception thrown on Ubuntu?
- python-3.x - How can I limit the CPU usage of moviepy?
- r - 在 R 中使用带有 git2r::clone 的 SSH 身份验证时获取“不支持的 URL 协议”
- sql - 如何保证字段值的唯一性?