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

如何防止JSONata在数组构造器中自动扁平化数组?

搞定JSONata数组构造器自动扁平化的小技巧

你遇到的这个自动扁平化问题,是JSONata数组字面量的默认行为——只要你把数组类型的变量直接放进外层数组里,它就会自动把嵌套数组拆解开合并到外层。除了你已经在用的[$.w, [$.x], [$.y], $.z]这种手动包裹的方法,还有两个更顺手的方案:

1. 用$()把数组表达式包起来

JSONata里的$()运算符会把内部表达式的结果当作单个值返回,哪怕结果是数组也不会被扁平化。所以你的查询可以改成:

[$.w, $($.x), $($.y), $.z]

运行后就能得到你想要的[ true, ["a", "b"], [1, 2, 3], 9 ],语义上也更明确,相当于告诉JSONata“把这个数组当成一个单独元素”。

2. 用$map批量处理字段

如果以后要处理的字段比较多,或者需要灵活调整字段列表,用$map会更高效。比如先列好要提取的字段名,再逐个取值:

$map(["w", "x", "y", "z"], function($key) { $[$key] })

这种方式的好处是,要是后续要加字段或者改顺序,只需要修改["w", "x", "y", "z"]这个列表就行,不用挨个调整每个元素,维护起来更方便,结果同样是你期望的嵌套数组结构。

额外说两句

JSONata的自动扁平化其实是个实用特性,能快速合并多个数组,但当我们需要保留嵌套结构时,上面这两种方法都能完美解决。如果只是单个或少数几个数组字段,用$()包裹最直接;字段多的话,$map的批量处理会更省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:42:31