Dart:如何避免JSON中的'0'被解析为int而非double
解决Dart JSON解析中数值类型混合的问题
我之前也碰到过一模一样的情况!Dart自带的json.decode确实会“认死理”——JSON里写的是整数0就解析成int,写的是带小数点的就解析成double,结果就出现了List<dynamic>里混着两种数值类型的情况。想要不用自定义转换函数解决的话,有两个实用的办法:
1. 从数据源端彻底解决(推荐)
直接让提供这个JSON的服务把所有数值都改成浮点格式,比如把0改成0.0。这样json.decode解析出来的所有元素都会是double类型,前端完全不用额外处理,一步到位。
2. 前端侧用内置方法统一类型
如果没法修改后端返回的内容,也不用写自定义转换函数,用Dart内置的列表处理方法就能搞定:
方法一:用List<double>.from()构造新列表
这个构造函数会自动把列表里的int安全转换成double,代码示例:
import 'dart:convert'; void main() { final jsonStr = '[0.23, 0.2, 0, 0.43]'; final dynamicList = json.decode(jsonStr) as List<dynamic>; final doubleList = List<double>.from(dynamicList); print(doubleList[2].runtimeType); // 输出 double }
方法二:用cast<double>()创建类型视图
这个方法不会创建新列表,而是生成一个类型转换后的视图,访问元素时会自动转换类型,代码示例:
import 'dart:convert'; void main() { final jsonStr = '[0.23, 0.2, 0, 0.43]'; final dynamicList = json.decode(jsonStr) as List<dynamic>; final doubleList = dynamicList.cast<double>(); print(doubleList[2].runtimeType); // 输出 double }
两种方法都不需要你写额外的转换逻辑,都是用Dart自带的功能,完全符合你“避免自定义转换函数”的要求。
内容的提问来源于stack exchange,提问作者Abarroso
相关产品推荐
相关产品推荐

