Dot-Net

在 Json.NET 中查找任何節點

  • May 8, 2021

我正在使用 NewtonSoft Json.NET 庫來解析 .NET 應用程序中的 JSON 文件。我需要做的是傳遞一個節點的名稱,如果它存在則獲取該節點,而不管它們的級別是事先未知的。

例如在一個文件中:

string json = @"{
 ""Name"": ""Apple"",
 ""Expiry"": new Date(1230422400000),
 ""Price"": 3.99,
 ""ATest"": {
   ""MyTest"":
   [
      ""blah"",
      ""blah""
   ]
 }
}";

有沒有辦法只使用該值"MyTest"來獲取該節點而不必知道父級的名稱jObject["ATest"]["MyTest"][0]

JTokenAFAIK 對於/沒有類似 XPath 的查詢語法JObject,但您可以相當輕鬆地製作一個 - 請參見下面的程式碼。

public static class StackOverflow_13033174
{
   public static void Test()
   {
       string json = @"{ 
                         ""Name"": ""Apple"", 
                         ""Expiry"": new Date(1230422400000), 
                         ""Price"": 3.99, 
                         ""ATest"": { 
                           ""MyTest"": 
                           [ 
                              ""blah"", 
                              ""blah"" 
                           ] 
                         } 
                       }";

       JObject jo = JObject.Parse(json);
       JToken myTest = jo.Descendants()
           .Where(t => t.Type == JTokenType.Property && ((JProperty)t).Name == "MyTest")
           .Select(p => ((JProperty)p).Value)
           .FirstOrDefault();
       Console.WriteLine(myTest);
   }
}

引用自:https://stackoverflow.com/questions/13033174