如何以编程方式计算 JSON 文件中有多少项



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

我目前已使用以下代码将从查询返回的字符串传递到 NewtonsoftJObject

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,但我的代码卡在那里。没有错误消息;它只是挂在那里。

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

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

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

对此:

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

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

最新更新