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

如何从嵌套结构JSON的results列表中提取指定field对应的value?

问题:提取指定字段的value值

需要从以下JSON数据的results列表的每个子列表中,提取所有field等于@logStream的对象的value值:

{
  "results": [
    [
      {
        "field": "@logStream",
        "value": "i-0d41c4f2b294fae88-messages"
      },
      {
        "field": "@ptr",
        "value": "CmEKJgoiMTI1NzEwNTIwMzE3OkRhdGFJbmdlc3QtZW50ZXJwcmlzZRAHEjUaGAIGPjW1igAAAACsKl4NAAY/k4KwAAAAoiABKIzAjqzoMDC5+ZGs6DA4D0DrEEi4C1DlBxgAEA4YAQ=="
      }
    ]
  ],
  "statistics": {
    "recordsMatched": 94761,
    "recordsScanned": 94761,
    "bytesScanned": 13659575
  },
  "status": "Complete"
}

尝试过的表达式及错误结果:

  • 表达式:results[].[field==@logStream]
    返回布尔值数组:
    [
      [
        true
      ],
      [
        false
      ]
    ]
    
  • 表达式:results[].[field==@logStream].value
    返回:[ null ]
  • 表达式:results[].[field==@logStream].[value]
    返回:null

期望结果:

[
  [
    {
      "value": "i-0d41c4f2b294fae88-messages"
    }
  ]
]

解决方案:正确的JMESPath表达式

要实现需求,需要使用JMESPath的过滤表达式([?条件])来筛选符合要求的对象,而非直接做布尔比较:

1. 匹配期望结果(仅保留value字段的对象):

results[].[?field == '@logStream'].{value: value}

2. 保留完整符合条件的对象(包含field和value):

results[].[?field == '@logStream']

失败原因说明:

  • 直接写field==@logStream``只会返回每个对象的布尔比较结果,而非过滤出对象本身;
  • 基于布尔值去访问.value属性,自然会得到null,因为布尔类型没有该属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:17:51