JSON合并和重写数组
我想合并覆盖两个json对象。 这里的困难是合并是在一个数组中。 知道何处合并的唯一方法是使用“name”属性。
- 有一个简单的解决scheme来做我想要的当前结构?
- 你会考虑改变JSON结构,就像把名字作为一个关键来缓解合并?
我的主要目的是以下几点:
{ "servers": { "services": [ { "name": "api" "prop1": "XXX", "prop2": "XXX" }, { "name": "web" "prop1": "XXX", "prop2": "XXX" } ] } }
“networking”服务需要被覆盖:
{ "servers": { "services": [ { "name": "web" "prop1": "overriden value" } ] } }
结果对象应该是:
{ "servers": { "services": [ { "name": "api" "prop1": "XXX", "prop2": "XXX" }, { "name": "web" "prop1": "overriden value", "prop2": "XXX" } ] } }
我已经做了一个节点包,它有点矫枉过正, 但它会做这个工作,称为json_merger :
// https://www.npmjs.com/package/json_merger var json_merger = require('json_merger'); var a = { "servers": { "services": [ { "name": "api" "prop1": "XXX", "prop2": "XXX" }, { "name": "web" "prop1": "XXX", "prop2": "XXX" } ] } }; var b = { "servers": { "services": [ { "@match": "[name=web]", "prop1": "overriden value" } ] } } var result = json_merger.merge(a, b);
但是,使用任何体面的合并工具,它都会支持索引:
// This is pseudo code: var a = [{...}, {...}, {...}] // to override object at index 1 you should be able to do this: merge(a, [{/*intentional empty object, so we get index up*/}, 'new value at index 1']);