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

JSONATA技术问题:从嵌套对象数组生成目标数组

JSONATA 简化图片元数据:提取每个文件的所有关键词名称数组

你需要把每个文件对象里的keywords字段从嵌套对象数组([{"name": "xxx"}, ...])转换成对应的name值数组,不用纠结$zip,直接对文件数组做映射更直观:

正确的JSONATA表达式

body.files.{
  "id": id,
  "title": title,
  "keywords": keywords.name
}

执行结果

[
  {
    "id": 101936854,
    "title": "Taco Salad",
    "keywords": ["background", "baked", "beef"]
  },
  {
    "id": 412961542,
    "title": "Fiji",
    "keywords": ["beach", "sea", "tree"]
  }
]

分析你之前的问题

  • 查询1:$zip(body.files.id,body.files.title,body.files.[keywords.name]){"id": $[0],"title": $[1],"keywords": $[2]}
    $zip返回的是包含所有文件对应字段的多维数组,但你直接用对象构造语法,只会取zip结果的第一个元素组合,所以仅返回第一个文件。

  • 查询2:$zip(body.files.id,body.files.title,body.files.[keywords.name]).{"id": $[0],"title": $[1],"keywords": $[2]}
    问题出在body.files.[keywords.name]——方括号在这里是取数组的第一个元素,实际取的是每个文件keywords数组里第一个对象的name值,导致最终每个文件的keywords只有单个值。把方括号去掉改成body.files.keywords.name,再配合$zip和映射就能得到正确结果:

    $zip(body.files.id, body.files.title, body.files.keywords.name).{
      "id": $[0],
      "title": $[1],
      "keywords": $[2]
    }
    

    不过这种写法不如直接映射文件数组简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:01:30