获取带有 JSON.net 的 JToken 的名称/密钥



我有一些看起来像这样的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

相关内容

  • 没有找到相关文章

最新更新