我想比较两个JSON对象,并返回另一个对象,只在一个JSON对象中缺少属性。例如:
json1 = {
"name": "ABCD",
"hobbies": [
{
"water_hobby1": "Rafting",
"water_hobby2": "swimming",
},
{
"hobby3": "Singing",
"hobby4": "Drawing",
}
]
}
json2 = {
"name": "ABCD",
"hobbies": [
{
"hobby3": "Singing",
"hobby4": "Drawing",
}
]
}
预期输出:
json = {
"hobbies": [
{
"water_hobby1": "Rafting",
"water_hobby2": "swimming",
},
]
}
可以说我写了json1.getDiff(json2);我希望生成的json仅包含json2中缺少并且存在于json1中的属性。属性和属性本身的嵌套是动态的。
我的实际JSOn如下:
{
"property1": 0,
"property2": "value1",
"property3": [
{
"name": "value2",
"property4": [
{
"property5": 0,
"name": "value3",
"porperty6": 0,
"property7": [
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
},
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
},
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
},
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
},
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
},
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
},
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
},
{
"name": "",
"property": 0,
"property": value,
"property": "value",
"property": "value",
"property": "value"
}
]
},
{
Many Such Objects With nested array and objects
}]
},
{
"name": "value",
"property4": []
}
}
假设我的源JSON包含Property7 [0]对象,但是我的另一个JSON对象不包含Property7 [0]对象。我只想返回Property7 [0]作为我的输出。我下面的代码返回整个Property7数组,该数组显然不包含property7 [0]对象。但这不是我想要的。代码没有遍历数组Property7中的对象。我寻求一些帮助我实现这一目标的方法。
答案 0 :(得分:1)
如果还不算太晚,或者有人来这里寻找一个比较两个JSON对象(或几乎任何可序列化的实体)的轻量级库,则可以使用以下程序包,(目前)使用Newtonsoft.Json JObjects并突出显示差异如下所示基于一个简单约定(*修改,-删除,+从/添加到第二个操作数)。
{
"name":"John",
"age":30,
"cars": {
"car1":"Ford",
"car2":"BMW",
"car3":"Fiat"
}
}
{
"name":"John",
"cars": {
"car1":"Ford",
"car2":"BMW",
"car3":"Audi",
"car4":"Jaguar"
}
}
var j1 = JToken.Parse(Read(json1));
var j2 = JToken.Parse(Read(json2));
var diff = JsonDifferentiator.Differentiate(j1,j2);
{
"-age": 30,
"*cars": {
"*car3": "Fiat",
"+car4": "Jaguar"
}
}
答案 1 :(得分:0)
首先,您必须为自己定义此“ diff”。例如:两个对象都具有某些属性但值不同时,应该返回什么?
根据您的定义(仅比较两个对象的属性)编写一些代码并不难。我认为这篇文章可以为您提供帮助:Find and return JSON differences using newtonsoft in C#?