使用jquery合并两个json对象

我有两个json对象:

http://example.com/search.json?section=saloon

http://example.com/search.json?section=coupe

我一直在寻找一种方法将这两个对象组合成一个对象。

提前致谢。

使用extend

 var object = $.extend({}, object1, object2); 

通过传递一个空对象作为目标(第一个)参数,您可以保留两个对象,但是如果要合并第二个对象,则可以像

 $.extend(object1, object2); 

DEMO

好吧,一旦你的JSON被提取和解析,你可以迭代属性并将它们添加到一个新对象。 但要小心,如果有相同名称的属性,它们将被覆盖。

 var data1 = '{"foo": 123, "test":"foo"}'; var data2 = '{"bar": 456, "test":"bar"}'; var json1 = JSON.parse(data1); var json2 = JSON.parse(data2); var merged = {}; for(var i in json1) { if (json1.hasOwnProperty(i)) merged[i] = json1[i]; } for(var i in json2) { if (json2.hasOwnProperty(i)) merged[i] = json2[i]; } console.log(merged); 

生成的合并JSON对象将是:

 {foo: 123, test: "bar", bar: 456} 

DEMO

编辑: 正如3nigma所提到的 ,如果你使用的是jQuery,你最好使用$.extend 。 如果您不想修改现有对象,请不要忘记首先传递空对象。

即使一个属性不同,所有这些都会覆盖整个对象,如果要追加具有新属性的对象并仅覆盖JSON的叶子,则使用此属性。

DEMO

 //smart not to delete entire object if a property is different, (unlike $.extend or _.extend) // {"a":{"b":"c", "e":"f"}},{"a":{"b":"x"}} -> {"a":{"b":"x", "e":"f"}} not {"a":{"b":"x"}} //obj1 is not effected, //obj1 values are overwriten at leaves of obj2 // smartJSONextend({"a":{"b":"c"}},{"a":"d"}) - {"b":"c"} will be "d" function smartJSONextend(obj1, obj2) { //clone var mergedObj = JSON.parse(JSON.stringify(obj1)); (function recurse(currMergedObj, currObj2){ var key; for (key in currObj2) { if (currObj2.hasOwnProperty( key )){ //keep path alive in mergedObj if (!currMergedObj[key]){ currMergedObj[key] = undefined; } if ( typeof currObj2[key] === "string" || typeof currObj2[key] === "number" || typeof currObj2[key] === "boolean" ){ //overwrite if obj2 is leaf and not nested currMergedObj[key] = currObj2[key]; } else if (typeof currObj2[key] === "object"){ //obj2 is nested //and currMergedObj[key] is undefined, sync types if (!currMergedObj[key]) { //obj2[key] ifArray if(currObj2[key].length !== undefined){ currMergedObj[key] = []; } else { currMergedObj[key] = {}; } } recurse(currMergedObj[key], currObj2[key]); } } } }(mergedObj, obj2)); return mergedObj; } 

你可以使用合并

 var mergedObj = $.merge(jsonObj1, jsonObj2);