一尘不染

当我事先不知道密钥时,如何在C#中解析JSON对象?

json

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

{
  "910719": {
    "id": 910719,
    "type": "asdf",
    "ref_id": 7568
  },
  "910721": {
    "id": 910721,
    "type": "asdf",
    "ref_id": 7568
  },
  "910723": {
    "id": 910723,
    "type": "asdf",
    "ref_id": 7568
  }
}

如何使用JSON.net解析?我可以先这样做:

JObject jFoo = JObject.Parse(data);

我需要能够遍历此列表中的每个对象。我希望能够做这样的事情:

foreach (string ref_id in (string)jFoo["ref_id"]) {...}

要么

foreach (JToken t in jFoo.Descendants())
{
    Console.WriteLine((string)t["ref_id"]);
}

但是当然不行。如果您在编写代码时知道键,那么所有示例都可以很好地工作。如果您事先不知道密钥,它就会崩溃。


阅读 215

收藏
2020-07-27

共1个答案

一尘不染

这是可行的;这可行,但并不优雅。我敢肯定有更好的方法。

var o = JObject.Parse(yourJsonString);

foreach (JToken child in o.Children())
{
    foreach (JToken grandChild in child)
    {
        foreach (JToken grandGrandChild in grandChild)
        {
            var property = grandGrandChild as JProperty;

            if (property != null)
            {
                Console.WriteLine(property.Name + ":" + property.Value);
            }
        }
    }
}

印刷品:

ID:910719
类型:asdf
ref_id:7568
ID:910721
类型:asdf
ref_id:7568
ID:910723
类型:asdf
ref_id:7568
2020-07-27