使用JSON.net获取JToken的名称/密钥

时间:2014-01-08 17:18:33

标签: c# json json.net

我有一些看起来像这样的JSON

[
  {
    "MobileSiteContent": {
      "Culture": "en_au",
      "Key": [
        "NameOfKey1"
      ]
    }
  },
  {
    "PageContent": {
      "Culture": "en_au",
      "Page": [
        "about-us/"
      ]
    }
  }
]

我将其解析为JArray:

var array = JArray.Parse(json);

然后,我循环遍历数组:

foreach (var content in array)
{

}

contentJToken

如何检索每个项目的“名称”或“密钥”?

例如,“MobileSiteContent”或“PageContent”

4 个答案:

答案 0 :(得分:103)

JTokenJObjectJArrayJPropertyJValue等的基类。您可以使用Children<T>()方法获取特定类型的JToken子项的筛选列表,例如JObject。每个JObject都有一个JProperty个对象的集合,可以通过Properties()方法访问这些对象。对于每个JProperty,您都可以获得Name。 (当然,如果需要,您也可以获得Value,这是另一个JToken。)

总而言之,我们有:

JArray array = JArray.Parse(json);

foreach (JObject content in array.Children<JObject>())
{
    foreach (JProperty prop in content.Properties())
    {
        Console.WriteLine(prop.Name);
    }
}

输出:

MobileSiteContent
PageContent

答案 1 :(得分:15)

JObject的默认迭代器是一个迭代键/值对的字典。

JObject obj = JObject.Parse(response);
foreach (var pair in obj) {
    Console.WriteLine (pair.Key);
}

答案 2 :(得分:13)

JObject obj = JObject.Parse(json);
var attributes = obj["parent"]["child"]...["your desired element"].ToList<JToken>(); 

foreach (JToken attribute in attributes)
{   
    JProperty jProperty = attribute.ToObject<JProperty>();
    string propertyName = jProperty.Name;
}

答案 3 :(得分:-1)

最简单的方法是查看JSON对象中每一项的路径。

For Each token As JToken In json
        Dim key= token.Path.Split(".").Last
Next