如何从嵌套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
相关产品推荐
相关产品推荐

