首页 > 解决方案 > 如何以编程方式计算 JSON 文件中有多少项目

问题描述

我正在向 SharePoint 查询文档库中所有文件夹的列表(使用 REST API)。我需要知道找到的文件夹数量以及每个文件夹中的项目数量。(这些数字会随着客户端添加/删除文件夹而定期更改。)

我目前JObject使用以下代码将从查询返回的字符串传递给 Newtonsoft:

JObject Json = JObject.Parse(Folders);

下面是我返回的 JSON 的简化版本:

{
  "d": {
    "results": [
      {
        "__metadata": {
          "id": "https://client.sharepoint.com/testsubsite/api/Web/GetFolderByServerRelativePath(decodedurl='testsubsite/CountryFolders/Germany')"
        },
        "Name": "Germany",
        "itemCount": 3
      },
      {
        "__metadata": {
          "id": "https://client.sharepoint.com/testsubsite/api/Web/GetFolderByServerRelativePath(decodedurl='testsubsite/CountryFolders/UK')"
        },
        "Name": "UK",
        "itemCount": 5
      }
    ]
  }
}

有没有办法让这个循环进入一个foreach循环,为找到的不同文件夹重复(在这种情况下为 2:“德国”和英国“)或一个for将结果计数作为限制器的循环。

我的 C# 代码在下面,“文件夹”是从初始查询中收到的字符串。

 JObject Json = JObject.Parse(Folders);
 JArray resultArray = (JArray)Json["results"];
 for (int i = 0; i < resultArray.Count; i++)
 {
     var item = (JObject)resultArray[i];
     //do something with item
 }

JObject代码按预期返回一个 JSON 文件,string name = (string)Json["d"]["results"][0]["Name"];可用于检索找到的第一个文件夹的名称(德国)。

我试图JArray从“结果”创建一个,但我的代码卡在那里。没有错误信息;它只是挂在那里。

标签: c#jsonrestsharepointjson.net

解决方案


在上面的代码块中,您忘记了resultsd. 由于 JSON 中没有results根级别,因此resultArray将为 null。当您尝试访问resultArray.Countin 循环时,您会得到一个NullReferenceException,但是如果您没有看到错误消息,那么您的代码中的某些东西一定会吃掉它。

要解决此问题,请更改此行:

JArray resultArray = (JArray)Json["results"];

对此:

JArray resultArray = (JArray)Json["d"]["results"]; 

小提琴:https ://dotnetfiddle.net/CcA9Uv


推荐阅读