Jsonata是否支持类似JavaScript的Spread语法来扩展对象?
在Jsonata中为对象添加属性而不重列所有属性的方法
Jsonata目前并没有像JavaScript那样的...扩展语法,没法直接通过这种方式合并对象属性。不过有更简洁的替代方案:
使用$merge()原生函数
Jsonata提供了$merge()函数,可以用来合并多个对象,实现保留原对象所有属性并添加新属性的需求。针对你的场景,代码可以这么写:
{ "address": $merge([ $.customer.addresses[id=$$.shippingAddressId], { "fullName": firstName & " " & lastName } ]) }
$merge()会把数组中后续对象的属性合并到第一个对象上,如果存在同名属性,后续对象的属性会覆盖前面的,完全满足你添加新属性的需求,而且不用手动列出原对象的所有属性。
显式列出属性(你当前的写法)
如果原对象属性不多,你补充的这种显式列出属性的写法可读性很好,适合属性数量少的场景:
{ "address": $.customer.addresses[id=$$.shippingAddressId].{ "street": street, "city": city, "fullName": firstName & " " & lastName } }
这种写法虽然需要手动列属性,但逻辑直观,维护起来也方便,适合小对象的场景。
内容的提问来源于stack exchange,提问作者Alex Jäger
相关产品推荐
相关产品推荐

