我有一个如下的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
}
有人能够阐明我所缺少的东西吗?
答案 0 :(得分:1)
如果我们稍微简化一下示例代码以删除unixTime
元素(现在仅对其进行硬编码),我们将得出以下结论:
JObject jsonObj = JObject.Parse(response);
string unixTime = "1534860000";
在此阶段,我们有jsonObj
,它指向JSON对象的根,并且具有单个属性result
。在此处为上下文重复您的foreach
:
foreach (var obj in jsonObj["result"])
{
var array = obj[unixTime]; //here is where the error occurs
}
您最终以obj
引用了result.1534860000
的JSON路径。问题是您然后在此 JSON路径(1534860000
)上寻找属性result.1534860000.1534860000
,而该属性不存在。
您可以直接获取值,就像这样:
var array = obj["result"][unixTime]
当然,这需要进行一些错误检查以确保路径存在,等等,但是它证明了这一点。
答案 1 :(得分:0)
在柯克·拉金(Kirk Larkin)的帮助下,我想我会发布一段代码。
JObject jsonObj = JObject.Parse(response);
int hour = 0;
string unixTime = Helpers.ConvertToUnix(yesterday.AddHours(hour)).ToString();
var array = jsonObj["result"][unixTime];
现在它返回数组的内容。