尝试从Json Object C#提取值时出错

时间:2018-08-23 11:19:57

标签: c# json object json.net

我有一个如下的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
}

有人能够阐明我所缺少的东西吗?

2 个答案:

答案 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];

现在它返回数组的内容。