如何仅提取嵌套JSON中特定层级下指定key的取值?
提取JSON中特定层级的"text"字段值
问题背景
需要从大型嵌套JSON中仅提取与"event":"user"同级的"text"字段值,避免获取深层嵌套结构中的其他"text"值。使用递归遍历函数会返回所有"text"值,而直接访问层级的代码抛出KeyNotFound Error。
错误原因分析
尝试的代码for i in data["events"][0]: print(i["text"])存在逻辑错误:
data["events"][0]是列表中的第一个事件字典,遍历它会得到字典的键名(如"event"、"metadata"),而非字典本身- 用字符串键名去取
["text"]自然会触发KeyError
正确解决方案
遍历events列表中的每个事件字典,判断其event字段是否为user,再提取同级的text:
基础循环实现
# 假设data已通过json.load()加载完成 target_texts = [] for event in data["events"]: # 双重判断避免键不存在的异常 if event.get("event") == "user" and "text" in event: target_texts.append(event["text"]) print(target_texts) # 输出: ['Hi']
简洁列表推导式
如果追求代码简洁,可使用列表推导式:
target_texts = [ event["text"] for event in data["events"] if event.get("event") == "user" and "text" in event ]
为什么递归函数不符合需求
之前的递归函数json_extract会遍历JSON的所有层级,只要遇到键名为text的字段就会提取,因此会包含parse_data、responses等深层结构中的text值,无法满足仅提取event":"user"同级字段的要求。
内容的提问来源于stack exchange,提问作者NotARobot
相关产品推荐
相关产品推荐

