如何在JSONata中实现类似JS扩展运算符的查询结果扩展?
JSONata实现类似JavaScript扩展运算符的对象扩展
完全可以实现,JSONata提供了两种简洁的方式来合并对象、添加新字段,无需手动列出原有所有字段:
方法1:使用$merge函数
$merge函数接收对象数组,将其合并为单个新对象——后续对象的字段会覆盖前面对象的同名字段(无同名字段时则直接添加)。
针对你的场景,查询语句如下:
$merge([input, {"age": 35}])
输入输出示例
输入JSON:
{ "input": { "name": "John", "email": "john@domain.com" } }
执行查询后输出:
{ "name": "John", "email": "john@domain.com", "age": 35 }
方法2:使用对象转换运算符(~>)
JSONata的对象转换运算符可对目标对象进行修改,支持添加、更新、删除字段,语法为对象 ~> |目标路径| 修改对象|。这里用$指代当前对象(即input),直接追加新字段:
查询语句:
input ~> |$| {"age": 35}|
该方式同样会保留原对象所有字段并添加age,效果与$merge一致。
优势对比
你之前的写法input.{"name": name, "email": email, "age": 35}需要手动枚举所有原有字段,而上述两种方法无需重复编写,完全等效于JavaScript的{...input, age: 35}写法。
内容的提问来源于stack exchange,提问作者Alvaro Pedraza
相关产品推荐
相关产品推荐

