如何使用JSONata为JSON对象内嵌套的options数组追加元素
问题原因
你无法同时保留父级JSON结构和追加后的options数组,核心是你写的JSONata表达式仅返回了append操作得到的新数组,没有保留原对象的其他外层字段。JSONata会直接返回表达式的最终输出值,如果你的表达式只对options字段做操作,输出自然只有修改后的数组,丢失外层所有属性。
解决方案
你可以用JSONata内置的对象变换语法,实现「保留原有所有字段、仅修改指定字段」的效果,正确的表达式如下:
$ ~> | $ | { "options": $append(options, [{ "description": "Choice number four", "displayOrder": 4, "hidden": false, "label": "Option 4", "value": 4 }]) } |
上述语法中| |是JSONata的对象变换操作符,第一个$指代要修改的原根对象,中间的配置项仅声明需要覆盖的options字段,其余字段会自动原封不动保留。
如果你更习惯用$merge函数实现,也可以用如下写法,效果完全一致:
$merge([$, { "options": $append($.options, [{ "description": "Choice number four", "displayOrder": 4, "hidden": false, "label": "Option 4", "value": 4 }]) }])
内容的提问来源于stack exchange,提问作者Jonathan Nathanson
相关产品推荐
相关产品推荐

