簡體   English   中英

用 NewtonSoft 替換 Json 屬性

[英]Replace Json properties with NewtonSoft

不知道從哪里開始,所以我沒有任何示例代碼。

我需要更改 json 文檔中的屬性名稱。

var json = (@"{""id"":""12"",
   ""title"":""My Title"",
   ""Chunks"":[ 
      { 
         ""id"":""137"",
         ""title"":""Title"",
         ""description"":""null"",
         ""selections"":[ 
            { 
               ""id"":""169"",
               ""title"":""Choice"",
               ""sort_order"":""null"",
               ""questions"":[ 
               ]
            }
         ]
      }
   ]
}
}
}");

我需要將值為 12 的“id”更改為“document_id”並保留其他 id。 是否有像 NewtonSoft 這樣的 C# 庫允許您更改屬性而不是屬性值。 似乎是一個常見的場景,但我還沒有看到任何接近我想要做的事情。 我想我可以將 json 轉換為字符串並進行替換,但這似乎不太優雅。

使用Newtonsoft.Json.Linq.JObject的方法如下所示:

var obj = JObject.Parse(json);
obj["document_id"] = obj["id"]; // create new property called "document_id"
obj.Remove("id"); // remove the "id" property
Console.WriteLine(obj);

另請注意,您的 JSON 無效。 它最后有兩個額外的}

假設您希望在可能有多個節點的鍵為“id”且值為“12”時替換所有鍵,您可以使用 Linq 來識別具有鍵“Id”和值“12”的令牌,然后使用 Add /Remove 方法用於創建具有不同名稱的新節點。

例如,

JToken node = JToken.Parse(json);
var jObjectsWithTitle = node
    .SelectTokens("$..*")
    .OfType<JObject>()
    .Where(x => x.Property("id") != null &&  Convert.ToInt32(x.Property("id").Value) == 12);

foreach(var item in jObjectsWithTitle)
{
        item.TryGetValue("id",out var currentValue);
        item.Add("document_id",currentValue);
        item.Remove("id");
}

暫無
暫無

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

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