簡體   English   中英

使用c#根據條件合並兩個JSON對象

[英]Merge two JSON Objects based on condition using c#

需要根據特定條件使用 c# 合並兩個 json 對象。 如果源 JSON 的“啟用”屬性為“false”,而目標 JSON 的屬性與“true”相同,則需要替換該值。 其他明智的無需更換保持不變。

我試過這樣:

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

它與整個對象重疊。 需要根據條件合並。 提前致謝。

JSON 1: 

{
  "Name": "Sample",
  "Array": [],
  "Actions": [
    {
      "Name": "A",
      "Enabled": false
    },
    {
      "Name": "B",
      "Enabled": true
    }
  ]
}

JSON 2 :

{
  "Name": "Sample",
  "Array": [],
  "Actions": [
    {
      "Name": "A",
      "Enabled": true
    },
    {
      "Name": "B",
      "Enabled": false
    }
  ]
}

I need Result JSON as below.

{
  "Name": "Sample",
  "Tabs": [],
  "Actions": [
    {
      "Name": "A",
      "Enabled": true
    },
    {
      "Name": "B",
      "Enabled": true
    }
  ]
}

如果源 JSON 的“啟用”屬性為“false”,而目標 JSON 的屬性與“true”相同,則需要替換該值。 其他明智的無需更換保持不變。

一種方法是,

  1. 循環遍歷目標 json 中的Actions數組。
  2. 從上面的數組中讀取每個對象的NameEnabled
  3. 從源 json 中檢索相同的對象。
  4. 閱讀它的NameEnabled
  5. 檢查是否屬性Name從JSON同時匹配對象,並同時檢查Enabled從源JSON對象的屬性是false ,並Enabled從目的地JSON對象的屬性為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();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM