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
相关产品推荐
相关产品推荐

