cancel
Showing results for 
Search instead for 
Did you mean: 

JSON Object Diff

kmiesse
Contributor

Is there a way to easily show what key values do not match between two JSON objects? If I have two objects with the same keys, can I output just the keys and values that do not match between the two objects? I am looking for a way to do this without having to create an equality expression for each key.

10 REPLIES 10

dmiller
Admin
Admin

Have you tried the Diff Snap?


Diane Miller
Community Manager

I think the Diff snap is for comparing streams of documents and not specifically two documents or two objects in a document. I know I can easily tell if the two objects differ but I want to be able to easily tell what key values or fields differ within the two objects. If two key names are the same but their values are not then the key name and differing values would be in the output document. I’m not sure how to do that without a comparison expression for each key/field, which is tedious and not self-maintained if the keys/fields of the objects change.

Piyush
New Contributor III

Can you provide some sample data on what are we trying to achieve here.

I want to compare the prev_excptn.body object to the next_excptn.body object in the following example and create the output at the bottom showing the differences in the two.

[{
"dime_id": 10202,
"deleted_flag": false,
"start_dt": {
	"_snaptype_localdatetime": "2017-05-09T19:31:33.000"
},
"prev_excptn": {
	"body": {
		"id": 44,
		"eModel": {
			"id": 104,
			"eType": {
				"id": 56
			},
			"name": "Thing"
		},
		"sN": "00000064",
		"objectA": {
			"eId": 32,
			"mK": "werfewfe",
			"aUserId": 36,
			"aDateTime": {
				"dateTime": "2017-05-10T13:49:22+0000",
				"zone": "UTC"
			}
		}
	},
	"created": {
		"dateTime": "2017-05-10T13:49:21+0000",
		"zone": "UTC"
	}
},
"next_excptn": {
	"body": {
		"id": 44,
		"eModel": {
			"id": 104,
			"eType": {
				"id": 9999999999
			},
			"name": "Thing"
		},
		"sN": "00000064"
	},
	"created": {
		"dateTime": "2017-05-10T14:03:21+0000",
		"zone": "UTC"
	}
}

}]


The output would be something like this. I’m not set on this structure. I just want to only include the fields that didn’t match and their values. I used DNE on the next_excptn to show it Does Not Exist.

[{
"diff": {
	"body": {
		"eModel": {
			"eType": {
				"id": {
					"prev_excptn": 56,
					"next_excptn": 9999999999
				}
			}
		},
		"objectA": {
			"prev_excptn": {
				"eId": 32,
				"mK": "werfewfe",
				"aUserId": 36,
				"aDateTime": {
					"dateTime": "2017-05-10T13:49:22+0000",
					"zone": "UTC"
				}
			},
			"next_excptn": "DNE"
		}
	}
}

}]

I have spent a lot of time on this and am not yet done. It is tricky when fields don’t exist or they are many levels deep.