首页 > 解决方案 > 如何计算数组json中的值

问题描述

我在下面有一个 JSON 代码:

{
  "value": [
    {
      "name": "504896c031d2fcb9",
      "location": "North Europe",
      "properties": {
        "state": "UNKNOWN",
        "name": "504896c031d2fcb9",
        "siteInstanceName": "504896c031d2fcb93ec",
        "healthCheckUrl": null,
        "machineName": "lw0s",
        "containers": null
      }
    },
    {
      "name": "35aafa",
      "location": "North Europe",
      "properties": {
        "state": "UNKNOWN",
        "name": "35aafae",
        "siteInstanceName": "35aafaeff",
        "healthCheckUrl": null,
        "machineName": "lw1s",
        "containers": null
      }
    }
  ],
  "nextLink": null,
  "id": null
}

我已将 JSON 转换为动态的,如下所述:

string kq = reader.ReadToEnd();
dynamic jss = JsonConvert.DeserializeObject(kq);

我想知道如何计算 c# 中有多少个值?上面的例子有 2 个值

谢谢你。

标签: c#json

解决方案


转换为JArray.Count

也许,如果value不是数组类型,castedarray将返回为null

您可以添加处理以检查它是否不是null并获取.Count

dynamic jss = JsonConvert.DeserializeObject(kq);
JArray array = jss["value"] as JArray;
Console.WriteLine(array != null ? array.Count : 0);

示例程序(JsonConvert.DeserializeObject)


推荐:

由于您将 JSON 字符串反序列化为dynamicJsonConvert.DeserializeObject因此它将返回JObject类型的值。

我建议使用JObject.Parse而不是JsonConvert.DeserializeObject<T>(旨在转换为强类型对象)。

您可以阅读这个问题:JObject.Parse vs JsonConvert.DeserializeObject了解更多信息。

using Newtonsoft.Json.Linq;

JObject jss = JObject.Parse(json);
JArray array = jss["value"] as JArray;
Console.WriteLine(array != null ? array.Count : 0);

示例程序(JObject.Parse)


推荐阅读