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

如何从嵌套JSON中筛选Type为Shirt的条目并提取键值对?

解析JSON提取指定Type条目并生成字典

示例JSON数据

[
    {"Name": "cot", "Type": "Shirt", "Value": 99},
    {"Name": "lyc", "Type": "Shirt", "Value": 22},
    {"Name": "pan", "Type": "Pants", "Value": 50},
    {"Name": "sho", "Type": "Shoes", "Value": 120}
]

解决方案(Python)

常规内存加载(适合中小型JSON)

先将JSON解析为Python对象,再通过字典推导式或循环筛选构造目标字典:

import json

# 从字符串解析JSON(如果是文件,用json.load(open("data.json", "r")))
json_str = '''
[
    {"Name": "cot", "Type": "Shirt", "Value": 99},
    {"Name": "lyc", "Type": "Shirt", "Value": 22},
    {"Name": "pan", "Type": "Pants", "Value": 50},
    {"Name": "sho", "Type": "Shoes", "Value": 120}
]
'''
json_data = json.loads(json_str)

# 字典推导式(高效简洁)
shirt_dict = {item["Name"]: item["Value"] for item in json_data if item["Type"] == "Shirt"}

# 等价的普通循环写法(适合新手理解)
# shirt_dict = {}
# for item in json_data:
#     if item["Type"] == "Shirt":
#         shirt_dict[item["Name"]] = item["Value"]

print(shirt_dict)
# 输出: {'cot': 99, 'lyc': 22}

分块解析(适合超大型JSON,避免内存溢出)

如果JSON文件体积极大,推荐用ijson库分条解析,无需一次性加载整个文件:

import ijson

shirt_dict = {}
# 打开大型JSON文件,按条目解析(路径需根据你的JSON结构调整,比如外层是"items"则写"items.item")
with open("large_shirt_data.json", "r") as f:
    for item in ijson.items(f, "item"):
        if item["Type"] == "Shirt":
            shirt_dict[item["Name"]] = item["Value"]

常见问题排查

如果之前用循环没成功,大概率是错误覆盖字典而非添加键值对,比如:

# 错误写法:每次循环重新赋值字典,导致最终只剩最后一条符合条件的条目
shirt_dict = {}
for item in json_data:
    if item["Type"] == "Shirt":
        shirt_dict = {item["Name"]: item["Value"]}  # ❌ 这里是赋值新字典,不是添加键值

修正为shirt_dict[item["Name"]] = item["Value"]即可。

内容的提问来源于stack exchange,提问作者Hekna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:50:22