[英]Verify multiple nodes in JSON?
Here is my Json data这是我的 Json 数据
{
"DateCreated": "2019-07-26T10:25:27.1326123Z",
"CachedEntity": false,
"ToolsTitle": null,
"Profile": false,
"MenuItems": [{
"SubMenuItems": [{
"SubMenuItems": [],
"Title": "Sub Menu Item1",
"IsAuthorized": true,
}, {
"SubMenuItems": [],
"Title": "Sub Menu Item2",
"IsAuthorized": true,
}
],
"Title": "Menu Item1",
"IsAuthorized": true
}, {
"SubMenuItems": [{
"SubMenuItems": [],
"Title": "Sub Menu Item3",
"IsAuthorized": false,
}, {
"SubMenuItems": [],
"Title": "Sub Menu Item4",
"IsAuthorized": true,
}
],
"Title": "Menu Item2",
"IsAuthorized": true
}
]
}
I need to verify values in MenuItems
list.我需要验证
MenuItems
列表中的值。
eg IsAuthorized
value is False
for Sub Menu Item3
.例如,
Sub Menu Item3
IsAuthorized
值为False
。
"Title": "Sub Menu Item3" , "IsAuthorized":false
You can select all SubMenuItems
that satisfies: IsAuthorized = True
with list comprehension:您可以选择满足列表理解的所有子
SubMenuItems
: SubMenuItems
IsAuthorized = True
:
out = [sub_menu_Items for sub in data["MenuItems"]
for sub_menu_Items in sub["SubMenuItems"] if not sub_menu_Items["IsAuthorized"]]
print(out)
# [{'SubMenuItems': [], 'Title': 'Sub Menu Item3', 'IsAuthorized': False}]
# To match the expected output:
out = [{k: full_dict[k] for k in ('Title', 'IsAuthorized')} for full_dict in out]
print(out)
# [{'Title': 'Sub Menu Item3', 'IsAuthorized': False}]
If you need to load data from a .json
file, you can use the following:如果需要从
.json
文件加载数据,可以使用以下命令:
import json
from jsoncomment import JsonComment
with open("filename.json", "r") as f:
parser = JsonComment(json)
data = parser.load(f)
Note: The comma at the end of the list in the .json
file is not supported by json.load()
.注:在列表末尾的逗号
.json
文件不被支持json.load()
One solution might be to use jsoncomment
as suggested in this discussion .一种解决方案可能是使用本讨论中建议的
jsoncomment
。
You can use recursion with a generator:您可以将递归与生成器一起使用:
data = {'DateCreated': '2019-07-26T10:25:27.1326123Z', 'CachedEntity': False, 'ToolsTitle': None, 'Profile': False, 'MenuItems': [{'SubMenuItems': [{'SubMenuItems': [], 'Title': 'Sub Menu Item1', 'IsAuthorized': True}, {'SubMenuItems': [], 'Title': 'Sub Menu Item2', 'IsAuthorized': True}], 'Title': 'Menu Item1', 'IsAuthorized': True}, {'SubMenuItems': [{'SubMenuItems': [], 'Title': 'Sub Menu Item3', 'IsAuthorized': False}, {'SubMenuItems': [], 'Title': 'Sub Menu Item4', 'IsAuthorized': True}], 'Title': 'Menu Item2', 'IsAuthorized': True}]}
def results(d):
if "IsAuthorized" in d:
yield {i:d.get(i) for i in ['Title', 'IsAuthorized']}
for a, b in d.items():
if isinstance(b, dict):
yield from results(b)
elif isinstance(b, list):
for i in b:
yield from results(i)
result = list(results(data))
To find instances when IsAuthorized
is False
:要在
IsAuthorized
为False
时查找实例:
final_results = [i for i in result if not i['IsAuthorized']]
Output:输出:
[{'Title': 'Sub Menu Item3', 'IsAuthorized': False}]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.