我想将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。
答案 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部分。