c# - 如何以编程方式计算 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
从“结果”创建一个,但我的代码卡在那里。没有错误信息;它只是挂在那里。
解决方案
在上面的代码块中,您忘记了results
在d
. 由于 JSON 中没有results
根级别,因此resultArray
将为 null。当您尝试访问resultArray.Count
in 循环时,您会得到一个NullReferenceException
,但是如果您没有看到错误消息,那么您的代码中的某些东西一定会吃掉它。
要解决此问题,请更改此行:
JArray resultArray = (JArray)Json["results"];
对此:
JArray resultArray = (JArray)Json["d"]["results"];
推荐阅读
- npm - “npm ERR!Linux 4.19.43-coreos” - NPM 错误
- featuretools - 内置聚合和转换原语列表
- bash - 如何为在 WSL 内的 Windows 上运行的 conda 设置临时路径变量
- ruby-on-rails - Rails 5.2 Rspec 3.8 - 为什么十进制模型属性转换为字符串?
- reactjs - typescript 和 reactJS 的输入问题
- java - 我可以使用 SalesforceDX 作为现有 Eclipse 项目的版本控制吗?
- javascript - Javascript计时器页面刷新
- rest - 定义资源及其类型的宁静方式
- azure-active-directory - 我有属于另一个天蓝色活动目录的用户,我想将它们作为用户添加到我的天蓝色活动目录中
- flutter - 如何强制 ListView.builder 刷新?