Flutter JSON解析取值错位:访问dt_date却返回dt_command对应值
Flutter JSON解析字段取值错位问题排查与修复
问题原因
- 核心原因是Dart的位置构造函数参数顺序和实例化时的传参顺序不匹配:你贴出的示例代码中构造函数顺序看似正确,但实际运行的代码大概率存在
DataTake构造函数的dt_command和dt_date参数顺序颠倒的问题,导致你传入的jsonParse['dt_command']被赋值给了dt_date属性,最终出现取值错位。 - 次要原因是你使用了位置参数构造类,没有参数名校验逻辑,手写参数时很容易因为顺序错误触发这类隐蔽问题。
修复方案
方案1:对齐参数顺序(快速临时修复)
核对DataTake类的构造函数参数顺序,确保和实例化时传入的参数顺序完全一致即可:
class DataTake { final String dt_ve; final String dt_stats; final String dt_command; final String dt_date; // 确保参数顺序和属性、传参顺序完全对应 DataTake(this.dt_ve, this.dt_stats, this.dt_command, this.dt_date); }
实例化时代码保持现有写法,确认四个参数顺序和构造函数定义顺序一一对应即可恢复正常。
方案2:改用命名参数(推荐,彻底规避同类问题)
将构造函数改为命名参数加required修饰,从语法层面杜绝顺序错位的可能:
class DataTake { final String dt_ve; final String dt_stats; final String dt_command; final String dt_date; // 命名参数必须传入对应参数名,不会出现顺序错误 DataTake({ required this.dt_ve, required this.dt_stats, required this.dt_command, required this.dt_date, }); }
对应的实例化代码需要指定参数名:
final DataTake datatake = DataTake( dt_ve: jsonParse['dt_ve'], dt_stats: jsonParse['dt_stats'], dt_command: jsonParse['dt_command'], dt_date: jsonParse['dt_date'], );
优化建议
如果项目中JSON解析场景较多,可以使用json_serializable这类官方推荐的序列化库自动生成解析代码,避免手写解析逻辑出现人为错误。
内容的提问来源于stack exchange,提问作者Caramel
相关产品推荐
相关产品推荐

