如何解析嵌套JSON并按条件将数据收集至列表?
嵌套JSON解析与条件数据收集
需要从给定的嵌套JSON数据中,筛选出name为"Thomas"的条目,并将其items数组里所有level等于1的item_name值收集到列表中。
输入JSON
[ { "name": "Thomas", "place": "USA", "items": [ {"item_name":"This is a book shelf", "level":1}, {"item_name":"Introduction", "level":1}, {"item_name":"parts", "level":2}, {"item_name":"market place", "level":3}, {"item_name":"books", "level":1}, {"item_name":"pens", "level":1}, {"item_name":"pencils", "level":1} ], "descriptions": [ {"item_name": "Books"} ] }, { "name": "Samy", "place": "UK", "items": [ {"item_name":"This is a cat house", "level":1}, {"item_name":"Introduction", "level":1}, {"item_name":"dog house", "level":3}, {"item_name":"cat house", "level":1}, {"item_name":"cat food", "level":2}, {"item_name":"cat name", "level":1}, {"item_name":"Samy", "level":2} ], "descriptions": [ {"item_name": "cat"} ] } ]
现有代码
# 注意:原代码缺少json模块导入,运行会报错 with open('test.json', 'r', encoding='utf8') as fp: data = json.load(fp) for i in data: if i['name'] == "Thomas": #collect "item_name", values in a list (my_list) if "level":1 #my_list = []
解决方案
在找到name为"Thomas"的条目后,遍历其items数组,筛选出level等于1的元素并提取item_name即可。这里提供两种实现方式:
方式一:列表推导式(简洁高效)
import json with open('test.json', 'r', encoding='utf8') as fp: data = json.load(fp) my_list = [] for entry in data: if entry['name'] == "Thomas": # 用列表推导式直接筛选并收集目标值 my_list = [item['item_name'] for item in entry['items'] if item['level'] == 1] break # 找到目标条目后终止循环,避免不必要的遍历 print(my_list)
方式二:普通循环(直观易懂)
import json with open('test.json', 'r', encoding='utf8') as fp: data = json.load(fp) my_list = [] for entry in data: if entry['name'] == "Thomas": # 遍历items数组,逐个判断level条件 for item in entry['items']: if item['level'] == 1: my_list.append(item['item_name']) break print(my_list)
预期输出
运行上述代码后,my_list会得到:
["This is a book shelf", "Introduction", "books", "pens", "pencils"]
内容的提问来源于stack exchange,提问作者Lilly
相关产品推荐
相关产品推荐

