【问题标题】:Compare two json objects and return another JSON Object with only changes in c#比较两个 json 对象并返回另一个仅在 c# 中更改的 JSON 对象
【发布时间】:2020-05-20 21:58:45
【问题描述】:

我想比较两个 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 中的对象。一些帮助我实现这一点是我所寻求的。

【问题讨论】:

  • 我尝试了https://stackoverflow.com/questions/24876082/find-and-return-json-differences-using-newtonsoft-in-c 中提出的解决方案,但这会返回 json1 并删除了 water_hobby 对象。我使用的 json 比我给出的示例复杂得多,我无法弄清楚如何只返回丢失的对象。

标签: c# json


【解决方案1】:

首先你必须为自己定义这个“差异”。例如:当两个对象都具有某些属性但具有不同的值时应该返回什么?

根据您的定义编写一些仅比较两个对象的属性的代码应该不难。我觉得这篇文章可以帮到你:Find and return JSON differences using newtonsoft in C#?

【讨论】:

  • 我正在研究那里的解决方案。我得到的输出是hobbies - { "+": [ { "hobby3": "Singing", "hobby4": "Drawing" } ], "-": [ { "water_hobby1": "Rafting", "water_hobby2": "swimming" }, { "hobby3": "Singing", "hobby4": "Drawing" } ] } 但我只想记录 water_hobby json。我正在寻求帮助以了解如何实现这一目标。控件进入case JTokenType.Array:的场景是我没看懂的。
  • 我想了解如何再次检查数组中的嵌套对象并再次执行递归调用。
猜你喜欢
  • 2014-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多