【问题标题】:How can I get total count of all children and children of children and other grand children in a generic JSON如何在通用 JSON 中获取所有孩子和孩子的孩子和其他大孩子的总数
【发布时间】:2019-04-01 15:24:17
【问题描述】:

我有一个 JSON 文件,我必须在其中验证其所有节点和子节点的数量。但是,我找不到获得这些计数的通用方法

这是 JSON 文件的外观

{
  "total": 100,
  "offset": 0,
  "sources_used": [
    {
      "source": "mysource",
      "source_last_updated": "2018-10-24T16:16:10.698+00:00",
      "last_imported": "2019-01-17T22:13:03.861+00:00",
      "import_rate": ""
    }
  ],
  "search_performed_at": "2019-01-17T22:39:01.034+00:00",
  "results": [
    {
      "id": "id1",
      "label": "label1",
      "type": [
        "Countries"
      ],
      "sub_class_of": [

      ],
      ...............................

我必须确保顶部的 total 值对应于 results 元素的多个节点/子元素

我能够成功地将 JSON 文件解析为 .NET JSON 对象

string contents = File.ReadAllText("jsonfile.json");
var jsonobject = JObject.Parse(contents);

现在的问题是,如何获取 results 元素的所有子元素/所有元素,以便我可以根据 total 元素对其进行验证

【问题讨论】:

  • (jsonobject["results"] as JArray).Count
  • 类是什么样的?我会使用 Json Serializer 来获取类,以便更容易获取对象而不是使用匿名对象。见:docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/…
  • 这是“Total” - 从 API 中计算您必须遵守的事情吗?在 JSON 的上下文中,我真的想不出这种计数的任何有用应用。
  • 是的,“Total”来自API
  • @peinearydevelopment 谢谢先生,您的解决方案很完美

标签: c# json linq


【解决方案1】:

JObject.Parse 将文本解析成一个通用的object,这并不能说明导入的 JSON 的结构。

相反,如果您创建一个与您的 JSON 内容密切相关的类(例如,通过像 http://json2csharp.com/ 这样的在线工具),您可以运行 JsonConvert.DeserializeObject<RootObject>(yourJsonString)。

RootObject 将包含List<T> 类型的Results 属性,您可以针对该属性执行Count。

【讨论】:

  • 据我了解,OP 需要一个“deepCount”。如果 Reselts-List 的一个元素有孩子,他也希望他们被计算在内。他们的孩子一直到叶子节点。
【解决方案2】:

根据@peinearydevelopment 的建议,此解决方案效果最佳

var count = (taxonomy.JSONStructure["results"] as JArray).Count();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-29
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-18
    相关资源
    最近更新 更多