我有一个包含许多元素的.json
文件。我希望能够搜索一个元素值,并检查它的父元素/元素在其中的内容。这里我有一个.json
文件的示例。
{
"users": {
"123467890": {
"lvl": 100,
"xp": 1000,
"lastMessage": 91.996059
}
}
}
假设我选择了lvl
作为我的元素。如果不进行硬编码,我如何获得它的父级值?
遍历字典并添加包含值["lvl"]为100的键。
d = {
"users": {
"123467890": {
"lvl": 100,
"xp": 1000,
"lastMessage": 91.996059
},
"test": {
"lvl": 1,
"xp": 0,
"lastMessage": 91.996059
},
}
}
lvl_100_users = []
for user_id, properties in d["users"].items():
print(f"User ID: {user_id}; Properties: {properties}")
if properties["lvl"] == 100:
lvl_100_users.append(user_id)
print(lvl_100_users)
输出:
User ID: 123467890; Properties: {'lvl': 100, 'xp': 1000, 'lastMessage': 91.996059}
User ID: test; Properties: {'lvl': 1, 'xp': 0, 'lastMessage': 91.996059}
['123467890']
这里,obj指的是json对象,key指的是"lvl";(你的元素(。
def json_extract(obj, key):
"""Recursively fetch values from nested JSON."""
arr = []
def extract(obj, arr, key, parent=None):
"""Recursively search for values of key in JSON tree."""
if isinstance(obj, dict):
if key in obj.keys():
arr.append(parent)
return parent
for k, v in obj.items():
if isinstance(v, (dict, list)):
extract(v, arr, key, k)
elif isinstance(obj, list):
for item in obj:
extract(item, arr, key, parent)
return arr
values = extract(obj, arr, key)
return values