连接两个 JSON 对象

我有两个具有相同结构的 JSON 对象,我想使用 Javascript 将它们连接在一起。有什么简单的方法吗?

340286 次浏览

One solution is to use a list/array:

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);

Result

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

If you'd rather copy the properties:

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);

Output of above code is{ value1: '1', value2: '4', value3: '3' }

okay, you can do this in one line of code. you'll need json2.js for this (you probably already have.). the two json objects here are unparsed strings.

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


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


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

Based on your description in the comments, you'd simply do an array 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}];
var baseArrayOfJsonObjects = [{},{}];
for (var i=0; i<arrayOfJsonObjectsFromAjax.length; i++) {
baseArrayOfJsonObjects.push(arrayOfJsonObjectsFromAjax[i]);
}

You can use jquery extend method.

Example:

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

Result:

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

Just try this, using underscore

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);

Result

The actual way is using JS Object.assign.

Object.assign(target, ...sources)

MDN Link

There is another object spread operator which is proposed for ES7 and can be used with Babel plugins.

 Obj = {...sourceObj1, ...sourceObj2}

You can use Object.assign() method. The Object.assign() method is used to copy the values of all enumerable own properties from one or more source objects to a target object. It will return the target object.[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 }

I use:

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 }

From here.

I use:

let jsonFile = {};
let schemaJson = {};
schemaJson["properties"] = {};
schemaJson["properties"]["key"] = "value";
jsonFile.concat(schemaJson);

if using TypeScript, you can use the spread operator (...)

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


The simplest way :

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


const combinedData = {
json1,
json2
};


console.log(combinedData)

I dont know if you want this:

U can use this for create from arrays, all arrays need contains the same number of elments.

Example: If you have:

let a = ["a", "b", "c"];
let b = [1, 2, 3];

Use

concatArraysLikeJson([a, b]);

The result of is:

let result = {
0 : ["a", 1],
1 : ["b", 2],
2 : ["c", 3]
};

Typescript

concatArraysLikeJson(arrays:any){
let result:any = {};


let size:number = 0;
let make:boolean = true;


if(arrays.length > 0){
size = arrays[0].length;


for(let i = 1; i < arrays.length; i++){
let array = arrays[i];
    

if(make){
if(array.length != size){
make = false;
}
}
}
}


if(make){
for (let o = 0; o < size; o++) {
result[o] = [];
}


for(let i = 0; i < arrays.length; i++){
const array = arrays[i];


//console.log(array);


for (let o = 0; o < size; o++) {
const element = array[o];
result[o].push(element);
}
}


return result;
}else{
return false;
}
}

Javascript:

concatArraysLikeJson(arrays){
let result = {};


let size = 0;
let make = true;


if(arrays.length > 0){
size = arrays[0].length;


for(let i = 1; i < arrays.length; i++){
let array = arrays[i];
    

if(make){
if(array.length != size){
make = false;
}
}
}
}


if(make){
for (let o = 0; o < size; o++) {
result[o] = [];
}


for(let i = 0; i < arrays.length; i++){
const array = arrays[i];


//console.log(array);


for (let o = 0; o < size; o++) {
const element = array[o];
result[o].push(element);
}
}


return result;
}else{
return false;
}
}