如何使用JToken获取JSON数组的长度?
如何使用JToken获取数组的长度?
你的问题核心在于JPath(Newtonsoft.Json中SelectToken使用的路径语法)不支持JavaScript风格的.length写法,这就是为什么用rawRequest.asset.length作为路径时返回null的原因。下面给你两种可行的解决方案,你可以根据需求选择:
方案一:修改param为JPath支持的语法
JPath提供了Count()聚合函数来获取数组的元素数量,只需要把你的param改成rawRequest.asset.Count()即可直接通过SelectToken拿到长度值:
// 先修正JSON格式(原始JSON的键和字符串值必须用双引号,否则JToken.Parse会报错) var jsonString = @"{""rawRequest"": {""asset"": [""123"", ""456""]}}"; var param = "rawRequest.asset.Count()"; // 调整为JPath支持的Count()方法 JToken token = JToken.Parse(jsonString); JToken valueToken = token.SelectToken($"$.{param}"); var count = valueToken.Value<int>(); // 此时count的值为2,符合预期
方案二:不修改param,先获取数组再取长度
如果你不想改动现有的param字符串,可以先提取出数组的路径(去掉末尾的.length),获取到数组对应的JToken后,直接访问它的Count属性:
var jsonString = @"{""rawRequest"": {""asset"": [""123"", ""456""]}}"; var param = "rawRequest.asset.length"; // 处理param,提取数组的路径 var arrayPath = param.Substring(0, param.LastIndexOf(".length")); JToken token = JToken.Parse(jsonString); JToken arrayToken = token.SelectToken($"$.{arrayPath}"); // 直接获取数组元素数量 var count = arrayToken.Count; // 结果为2
额外提醒
你的原始jsonString格式不合法:JSON要求键名和字符串值必须用双引号包裹,而不是单引号或无引号。如果直接用你原来的字符串,JToken.Parse会抛出解析异常,所以一定要先修正JSON格式哦。
内容的提问来源于stack exchange,提问作者A. Gladkiy
相关产品推荐
相关产品推荐

