JSON合并和重写数组

我想合并覆盖两个json对象。 这里的困难是合并是在一个数组中。 知道何处合并的唯一方法是使用“name”属性。

  1. 有一个简单的解决scheme来做我想要的当前结构?
  2. 你会考虑改变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']);