You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:33:20