连接两个JSON对象


74

我有两个具有相同结构的JSON对象,我想使用Javascript将它们连接在一起。是否有捷径可寻?


您到底想如何吸引他们?两个对象中的每个元素或两个对象中的每个元素都作为一个新对象,而原始对象作为元素或……?
Gumbo

1
基本上我有10个Json对象的数组。然后,我进行Ajax调用以获取另外10个Json对象,并且我想将它们连接在一起以创建20个对象的数组。
克雷格(Craig)2009年

是否有JSON对象(反序列化为Object类型的变量)或字符串(序列化形式)?
Ates Goral

Answers:


96

根据注释中的描述,您只需执行一个数组concat:

var jsonArray1 = [{'name': "doug", 'id':5}, {'name': "dofug", 'id':23}];
var jsonArray2 = [{'name': "goud", 'id':1}, {'name': "doaaug", 'id':52}];
jsonArray1 = jsonArray1.concat(jsonArray2);
// jsonArray1 = [{'name': "doug", 'id':5}, {'name': "dofug", 'id':23}, 
//{'name': "goud", 'id':1}, {'name': "doaaug", 'id':52}];

5
您对jsonArray1的值的假设不正确。concat不会修改原始数组,而是返回一个新数组。
布列塔尼

1
您需要做jsonArray1 = jsonArray1.concat(jsonArray2);
布列塔尼

这真的救了我。感谢@jacobangel
mutiemule

1
对于1,2,3,这可以很方便地进行合并:var arr3 = [].concat(arr1, arr2);
Kevin Leary

38

如果您想复制属性:

var json1 = { value1: '1', value2: '2' };
var json2 = { value2: '4', value3: '3' };


function jsonConcat(o1, o2) {
 for (var key in o2) {
  o1[key] = o2[key];
 }
 return o1;
}

var output = {};
output = jsonConcat(output, json1);
output = jsonConcat(output, json2);

上面代码的输出是{ value1: '1', value2: '4', value3: '3' }


2
由于它们是对象,因此您无需返回它,因为对象是通过引用传递的
darkyndy 2014年

在一个有趣的特殊情况下,我需要合并两个JSON对象的属性,这就像一个魅力。谢谢。
Rodinga '16


24

您可以使用jquery扩展方法。

例:

o1 = {"foo":"bar", "data":{"id":"1"}};
o2 = {"x":"y"};
sum = $.extend(o1, o2);

结果:

sum = {"foo":"bar", "data":{"id":"1"}, "x":"y"}

更好的解决方案
Rijo

1
更简单,更清洁的解决方案。
fsinisi90 '17

1
jQuery并不过分的情况。
JustCarty

20

我用:

let x = { a: 1, b: 2, c: 3 }

let y = {c: 4, d: 5, e: 6 }

let z = Object.assign(x, y)

console.log(z)

// OUTPUTS:
{ a:1, b:2, c:4, d:5, e:6 }

这里


谢谢,这是我一直在寻找的快速解决方案!
娜娜

15

一种解决方案是使用列表/数组:

var first_json = {"name":"joe", "age":27};
var second_json = {"name":"james", "age":32};

var jsons = new Array();
jsons.push(first_json);
jsons.push(second_json);

结果

jsons = [
    {"name":"joe", "age":27},
    {"name":"james", "age":32}
]

1
咳嗽怎么[first_json, second_json]办?
PascalVKooten'3

1
如果OP仅具有两个对象,那肯定是正确的,但是由于它们特别提到了级联,因此这似乎是一个人为的示例,在寻找附加方法。
苏联

7

您可以使用Object.assign()方法。Object.assign()方法用于将所有可枚举的自身属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。[1]

var o1 = { a: 1 }, o2 = { b: 2 }, o3 = { c: 3 };

var obj = Object.assign(o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }

2
迄今为止最好的,简洁的代码以及相关示例!如果您弄清楚当键在不同对象之间不是唯一时会发生什么,那将是一件好事:)
Akash Agarwal

5

如果使用TypeScript,则可以使用传播运算符(...

var json = {...json1,...json2} 


谢谢!由于某种原因,在渲染状态下使用该方法效果更好
CrsCaballero

2

好的,您可以在一行代码中完成此操作。为此,您将需要json2.js(您可能已经拥有了。)。这里的两个json对象是未解析的字符串。

json1 = '[{"foo":"bar"},{"bar":"foo"},{"name":"craig"}]';

json2 = '[{"foo":"baz"},{"bar":"fob"},{"name":"george"}]';

concattedjson = JSON.stringify(JSON.parse(json1).concat(JSON.parse(json2)));

1

只需尝试使用下划线

var json1 = [{ value1: '1', value2: '2' },{ value1: '3', value2: '4' }];
var json2 = [{ value3: 'a', value4: 'b' },{ value3: 'c', value4: 'd' }];
var resultArray = [];
json1.forEach(function(obj, index){
  resultArray.push(_.extend(obj,  json2[index]));
});

console.log("Result Array", resultArray);

结果



0

我用:

let jsonFile = {};    
let schemaJson = {};    
schemaJson["properties"] = {};    
schemaJson["properties"]["key"] = "value";
jsonFile.concat(schemaJson);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.