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

erhoui1w  于 12个月前  发布在  .NET
关注(0)|答案(7)|浏览(287)

我有一些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”

vfwfrxfs

vfwfrxfs1#

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

wz8daaqr

wz8daaqr2#

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

foreach (JProperty attributeProperty in attributes)
{
    var attribute = attributes[attributeProperty.Name];
    var my_data = attribute["your desired element"];
}

字符串

7cjasjjr

7cjasjjr3#

JObject的默认迭代器就像一个字典,在键/值对上进行迭代。

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

字符串

tyky79it

tyky79it4#

使用Linq,我们可以这样写:

JArray array = JArray.Parse(json);

foreach (JObject content in array.Children<JObject>())
{
    List<string> keys = content.Properties().Select(p => p.Name).ToList();
}

字符串

vptzau2j

vptzau2j5#

string name = jToken.Path.Split(".").Last();

字符串
这对我很有效。

3npbholx

3npbholx6#

如果JToken键名未知,并且您只需要键名的Value而不考虑名称,则只需使用JToken.Values()方法。
下面的示例假设JToken值是基元类型-提取找到的第一个值。
解决方案可以扩展为支持数组值。

JToken fooToken = sourceData.

int someNum =  fooToken .Values<int?>().First() ?? 0;

int someString =  fooToken .Values<string>().First();

字符串

a8jjtwal

a8jjtwal7#

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

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

字符串

相关问题