You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解析嵌套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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 01:25:18