将JSON的特定部分合并在一起

时间:2017-01-20 14:49:22

标签: javascript angularjs json

我想将JSON代码的特定部分与另一个JSON合并。澄清一下,请参考下面的例子:

JSON 1:

{"metadata": {
    "userName": "Batman",
    "userId" : "402",
    "config":{
        "a" : "some text here",
        "b" : "some other text here"
    }
}}

JSON 2:

{"metadata": {
    "userName": "Superman",
    "userId" : "102",
    "config":{
        "a" : "Overwrite Text 1",
        "b" : "Overwrite Text 2"
    }
}}

现在,我想用JSON 2覆盖config部分JSON 1,以便JSON 1成为:

{"metadata": {
    "userName": "Batman",
    "userId" : "402",
    "config":{
        "a" : "Overwrite Text 1",
        "b" : "Overwrite Text 2"
    }
}}

我已经尝试过使用循环,但我想弄清楚是否有更有效的方法对其进行编码。我正在使用Angular和纯JS。

4 个答案:

答案 0 :(得分:3)

您可以尝试使用Object.assign - Mozilla foundation doc

var obj1 = JSON.parse(json1);
var obj2 = JSON.parse(json2);
Object.assign(obj1.metadata.config,obj2.metadata.config);

答案 1 :(得分:2)

非常简单:

json1.metadata.config = json2.metadata.config;

使用其他json对象的配置覆盖其config数据。

如果您希望我详细说明,请告诉我。

答案 2 :(得分:0)

json1.metadata.config = json2.metadata.config;

应该足够了。

您必须记住,修改json2.metadata.config会修改json1.metadata.config,这是一个浅表副本。

答案 3 :(得分:0)

使用Object.assign作为Djave说的是正确的,但是如果你不使用ES6和转换器,你可以利用Angular本身并做一个简单的angular.copy

var obj1 = JSON.parse(json1);
var obj2 = JSON.parse(json2);
obj1.metadata.config = angular.copy(obj2.metadata.config);

这样您就可以自行复制和引用新的JSON部分。