如何获取JSON子元素lat与lon的值?现有代码返回0而非真实值
解决JSON中获取lat和lon值的问题
首先得指出你代码里的核心问题:你直接从message节点取lat,但lat和lon其实藏在message的子节点location里面!因为JToken.Value<T>()找不到对应键时,会返回T类型的默认值(double的默认值就是0),所以你才拿到了错误的结果。
下面给你几种靠谱的解决方式:
方法一:直接链式定位节点
利用SelectToken的路径语法,一步到位定位到目标值:
// 假设你已经完成了JSON的解析,得到JToken类型的data var lat = data.SelectToken("message.location.lat")?.Value<double>(); var lon = data.SelectToken("message.location.lon")?.Value<double>();
这种写法最简洁,适合不需要额外操作中间节点的场景。
方法二:分步获取子节点
如果需要先对location节点做其他操作,可以分步取值:
JToken message = data.SelectToken("message"); JToken location = message.SelectToken("location"); // 先判断节点是否存在,避免空引用异常 if (location != null) { var lat = location.Value<double>("lat"); var lon = location.Value<double>("lon"); }
额外小技巧:避免默认值误导
要是担心找不到节点时返回的0会误导你,可以用可空类型double?,这样找不到目标值时会返回null,更容易排查问题:
var lat = data.SelectToken("message.location.lat")?.Value<double?>();
内容的提问来源于stack exchange,提问作者Aleksandra
相关产品推荐
相关产品推荐

