Flutter中如何从JSON结构正确提取lat、lng经纬度值
解析失败的核心原因
你写的取值路径和实际JSON结构不匹配,关键问题是results字段在你的测试JSON里是数组结构,不是普通的嵌套对象。
你的测试JSON中,results对应的值是用方括号包裹的列表,列表内部的每个元素才是带geometry字段的对象。你之前的代码跳过了“取数组元素”这一步,直接从results节点往下找geometry,自然拿不到对应的值,还可能触发类型不匹配的报错。
可直接运行的正确解析代码
// 解码JSON的逻辑和你原有写法保持一致 var myMap = json.decode(data.toString()); // 补上数组索引[0],逐层级匹配JSON结构 final lat = myMap['results'][0]['geometry']['location']['lat']; final lng = myMap['results'][0]['geometry']['location']['lng'];
实用注意事项
- 对照JSON结构梳理取值路径时,只要看到带
[]的数组节点,取值时必须搭配数字索引,不能直接用对象key访问 - 生产环境下接口返回的
results数组可能为空,取值前要加判空逻辑,避免数组越界、空指针异常:示例判空逻辑:先判断
(myMap['results'] as List).isNotEmpty,确认数组长度大于0后,再取索引0的元素做后续访问 - 长期开发建议将这套嵌套JSON转成强类型的实体类,减少手写层级路径时的书写错误,降低排查成本
内容的提问来源于stack exchange,提问作者androidleraner
相关产品推荐
相关产品推荐

