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

如何仅提取嵌套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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:50:42