使用C#根据条件合并两个JSON对象

时间:2019-04-19 12:57:37

标签: c#

需要根据特定条件使用c#合并两个json对象。如果源JSON的“ Enabled”属性为“ false”,而目标JSON的属性与“ true”相同,则需要替换该值。其他明智的做法是无需替换,保持不变。

我尝试过这样:

Start 0
After sleep 0
page commited 0
page is loading 0
page completed 0
Start 1
page is loading 1
After sleep 1
page commited 1
page completed 1
Start 2
page is loading 2
page commited 2
page completed 2
....

它与整个对象重叠。需要根据条件进行合并。预先感谢。

o1.Merge(o2, new JsonMergeSettings
{
    MergeArrayHandling = MergeArrayHandling.Merge
});

1 个答案:

答案 0 :(得分:0)

  

如果源JSON的“ Enabled”属性为“ false”,而目标JSON的属性与“ true”相同,则需要替换该值。其他明智的做法是无需替换,保持不变。

一种方法是,

  1. 在目标json中遍历Actions数组。
  2. 从上述数组中读取每个对象的NameEnabled
  3. 从源json检索相同的对象。
  4. 读取其NameEnabled
  5. 检查来自json的两个对象的属性Name是否匹配,还检查来自源json的对象的Enabled属性为false和来自目标json的对象的Enabled属性是否为true
  6. 将属性Enabled的值重写为true

string json1 = "Your source json";
string json2 = "Your destination json";

JObject jObject1 = JObject.Parse(json1);
JObject jObject2 = JObject.Parse(json2);

//1
foreach (JObject obj2 in (JArray)jObject2["Actions"])
{
    //2
    var key2 = obj2["Name"].ToObject<string>();
    var value2 = obj2["Enabled"].ToObject<bool>();

    //3
    var obj1 = jObject1["Actions"].Where(x => x["Name"].ToString() == key2).FirstOrDefault();

    //4
    var key1 = obj1["Name"].ToObject<string>();
    var value1 = obj1["Enabled"].ToObject<bool>();

    //5
    if (key1 == key2 && value1 == false && value2 == true)
    {
        //6
        obj2["Enabled"] = true;
    }
}

string outputJson = jObject2.ToString();