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

JSONata新手求助:如何从嵌套对象中提取数据

Hey there! 作为JSONata新手,从嵌套对象里提取数据确实得先摸透它的路径语法和遍历技巧,我结合你给出的示例对象(先补全为合法JSON),给你演示几种最常用的提取场景~

先补全你的示例JSON(确保可测试)

{
  "transaction": { "id": "de112b4b-82e2-4172-a89f-68724c90b692" },
  "domain": { "id": "realworld" },
  "listing": {
    "spanner": {
      "information": {
        "type": { "VENDOR": "Charlie" },
        "variables": {},
        "uid": "08_spanner",
        "mode": { "store": "bob" },
        "version": "1",
        "name": "Harrold"
      }
    },
    "hammer": {
      "information": {
        "type": { "VENDOR": "Cliff" },
        "variables": {},
        "uid": "08_hammer",
        "mode": { "store": "alice" },
        "version": "1",
        "name": "Henry"
      }
    }
  }
}

1. 提取单个深层字段

如果只需要某一个特定嵌套值,直接写完整路径就行:

  • 提取spanner的供应商名称:
    listing.spanner.information.type.VENDOR
    
    结果:"Charlie"
  • 提取交易ID:
    transaction.id
    
    结果:"de112b4b-82e2-4172-a89f-68724c90b692"

2. 批量提取同结构的嵌套数据(所有工具信息)

因为listing下的spanner、hammer是同结构的工具节点,用*通配符遍历所有子对象,再整理成你需要的格式:

listing.*.information.{
  "tool_name": $keys(listing)[$$], // 获取当前工具的名称(spanner/hammer)
  "vendor": type.VENDOR,
  "uid": uid,
  "store": mode.store,
  "tool_label": name
}

返回结果(结构化数组):

[
  {
    "tool_name": "spanner",
    "vendor": "Charlie",
    "uid": "08_spanner",
    "store": "bob",
    "tool_label": "Harrold"
  },
  {
    "tool_name": "hammer",
    "vendor": "Cliff",
    "uid": "08_hammer",
    "store": "alice",
    "tool_label": "Henry"
  }
]

小提示:$$代表当前遍历的上下文索引,配合$keys(listing)就能拿到工具的键名。

3. 过滤特定条件的数据

如果只想提取符合条件的工具(比如store为"bob"的工具),直接在路径后加过滤条件:

listing.*.information[mode.store = "bob"].{
  "tool": $keys(listing)[$$],
  "vendor": type.VENDOR,
  "uid": uid
}

返回结果:

[
  {
    "tool": "spanner",
    "vendor": "Charlie",
    "uid": "08_spanner"
  }
]

4. 整合多维度数据(扁平化输出)

如果需要把顶层的交易、域信息和工具数据整合到一个对象里:

{
  "transaction_id": transaction.id,
  "domain_id": domain.id,
  "tool_list": listing.*.information.{
    "vendor": type.VENDOR,
    "uid": uid
  }
}

返回结果:

{
  "transaction_id": "de112b4b-82e2-4172-a89f-68724c90b692",
  "domain_id": "realworld",
  "tool_list": [
    { "vendor": "Charlie", "uid": "08_spanner" },
    { "vendor": "Cliff", "uid": "08_hammer" }
  ]
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:29:34