Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
179
rated 0 times [  180] [ 1]  / answers: 1 / hits: 44532  / 12 Years ago, fri, april 27, 2012, 12:00:00

Say I have the following 2 json objects:



JSON A:
{
Field A:1,
Field B:2,
Field D:Something,
Field E:6
}

JSON B:
{
Field A:1,
Field B:2,
Field C:3,
Field D:Different
}


Sample Function:
function (jsonstringA, jsonstringB)



Example (If JSON A and JSON B used as parameters):



Returns a new JSON object containing:



{
Field C:3, // because function sees jsonstringB had no Field C
Field D: Different // sees jsonstringB had a different value for Field D
}


Note that it is using jsonstringA as the base of the comparison, so the function returns only the fields missing and values of jsonStringB. That is why Field E and its value is not returned.



What is the best way if possible to come up with a function that returns a json object containing values that have changed?



WHAT I HAVE TRIED:
I have tried doing a comparison by manually specifying the fields that I am trying to check for, but I would like to have something that requires me to not hardcode the Fields as it is very inefficient and everytime I add a new field to JSON B, I have to hardcode in the field I am looking for... that is why I am looking for something less of a pain.


More From » javascript

 Answers
87

It's not too hard to create a function like this. Just loop through each field in the second object, and if it's not present in the first or the value is different than the first, put that field in the return object.



var compareJSON = function(obj1, obj2) {
var ret = {};
for(var i in obj2) {
if(!obj1.hasOwnProperty(i) || obj2[i] !== obj1[i]) {
ret[i] = obj2[i];
}
}
return ret;
};


You can see it in action on this demo page.


[#85923] Thursday, April 26, 2012, 12 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
beatrices

Total Points: 745
Total Questions: 103
Total Answers: 105

Location: Guam
Member since Tue, Nov 29, 2022
2 Years ago
beatrices questions
Fri, Jan 14, 22, 00:00, 2 Years ago
Sun, Feb 14, 21, 00:00, 3 Years ago
Fri, Nov 20, 20, 00:00, 4 Years ago
Mon, Aug 12, 19, 00:00, 5 Years ago
;