c# - 尝试从 Json 对象 C# 中提取值时出错
问题描述
我有一个像下面这样的 Json 字符串,这只是一个小片段。引号中的数字是一个 Unix 时间,我需要用它来迭代每个对象。
{
"result": {
"1534860000": [
"1534860000",
19,
41
],
"1534863600": [
"1534863600",
11,
16
],
"1534867200": [
"1534867200",
2,
5
]
}
}
但是当我尝试提取数组中的数据时,出现错误:
System.InvalidOperationException:“无法访问 Newtonsoft.Json.Linq.JProperty 上的子值。”
代码:
JObject jsonObj = JObject.Parse(response);
string unixTime = Helpers.ConvertToUnix(yesterday.AddHours(hour)).ToString();
foreach (var obj in jsonObj["result"])
{
var array = obj[unixTime]; //here is where the error occurs
}
任何人都能够阐明我所缺少的东西吗?
解决方案
如果我们稍微简化您的示例代码以删除该unixTime
元素(让我们暂时对其进行硬编码),我们将得到以下结果:
JObject jsonObj = JObject.Parse(response);
string unixTime = "1534860000";
在这个阶段,我们有jsonObj
which 引用 JSON 对象的根,并且具有result
. 在此处重复您foreach
的上下文:
foreach (var obj in jsonObj["result"])
{
var array = obj[unixTime]; //here is where the error occurs
}
您最终obj
会引用 .json 的 JSON 路径result.1534860000
。问题是您正在此JSON 路径 ( )1534860000
处寻找不存在的属性。result.1534860000.1534860000
您可以直接获取值,如下所示:
var array = obj["result"][unixTime]
当然,这需要一些错误检查以确保路径存在等,但它证明了这一点。
推荐阅读
- python - Scipy 给出了错误的矩阵乘法结果
- java - 解决 '^M' 或 '\r' 字符行结尾的最佳位置/阶段
- python - 安装python3-dev时的问题
- java - 调用远程soap服务(javax.xml.ws)时获取NullPointerException
- maven - Maven-checktyle-plugin 忽略配置中的排除项
- docker - CMake - Docker容器内的VS 2013编译检查失败
- shiny - Shiny - 如何在 uiOutput 中使用的 numericInput 中禁用用户输入
- python - 在 CSV 文件 python 中使用现有的迭代行追加新行
- python - 如果元素具有越界列表索引,则返回默认值
- maven - 为什么制作springboot fat jar的mvm包适用于父级但不适用于dependencyManagment