繁体   English   中英

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

[英]Getting the name / key of a JToken with 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)
{

}

content是一个JToken

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

例如,“MobileSiteContent”或“PageContent”

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
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"];
}

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

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

使用 Linq 我们可以这样写:

JArray array = JArray.Parse(json);

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

如果JToken密钥名称未知,并且您只需要密钥的值而不考虑名称,只需使用JToken.Values()方法即可。

下面的示例假定JToken值是原始类型 - 提取找到的第一个值。
可以扩展解决方案以支持数组值。

JToken fooToken = sourceData.

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM