如何在JSONata数组内正确使用$lookup()函数实现属性值映射?
问题原因
这是JSONata的上下文作用域规则导致的:
- 在
Phone.{...}数组投影块内部,当前上下文指向Phone数组的每一个子元素对象,直接调用aux时,JSONata会优先在当前子元素的属性中查找aux,找不到就返回undefined - JSONata默认不会输出值为undefined的字段,因此
tipo字段直接被忽略,没有出现在最终结果里 - 数组外部的
$lookup能正常执行,是因为外部上下文仍然是根输入对象,可以直接匹配到aux属性
解决方案
用$root关键字明确指定读取根级的aux对象即可,修改后的JSONata代码如下:
{ "Telefone" : Phone.{ "tipo" : $lookup($root.aux, type), "numero" : number }, "tipo" : $lookup(aux, Phone[0].type) }
修改后运行即可得到符合预期的结果,每个Telefone数组元素都会携带正确翻译后的tipo字段。
内容的提问来源于stack exchange,提问作者caio
相关产品推荐
相关产品推荐

