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

Flutter读取assets本地JSON解析后控制台输出null问题排查

问题根因

解析逻辑和JSON结构不匹配:

  • 你的JSON根节点是一个包含title字段的对象,title字段对应的值是DataTitle类型的数组,不是单个DataTitle实例
  • 现有loadData方法直接把根节点对象传入DataTitle.fromJson(),根节点本身不存在number、firstarray、secondarray字段,所以解析出的属性全为null/空数组
  • 你预先定义的、匹配根节点结构的DataModel类没有被使用。
修复方案
  1. 首先确认pubspec.yaml中已正确注册JSON文件所在的assets目录,示例配置:
flutter:
  uses-material-design: true
  assets:
    - assets/ # 如果你把json文件放在assets根目录,直接注册目录即可,也可以写具体文件路径
  1. 修正loadData方法的解析逻辑,使用根模型DataModel承接解析结果,再从数组中取对应的数据:
// 注意需要引入flutter/services.dart才能用rootBundle
import 'package:flutter/services.dart';

Future loadData() async {
  // 替换为你自己的JSON文件实际路径
  String jsonString = await rootBundle.loadString('assets/data.json');
  final jsonResponse = json.decode(jsonString);
  // 用匹配根结构的DataModel解析
  DataModel rootModel = DataModel.fromJson(jsonResponse);
  // 取数组第一个元素,即你预期的number=8的那条数据
  if (rootModel.measure != null && rootModel.measure!.isNotEmpty) {
    DataTitle target = rootModel.measure!.first;
    print('${target.number} - ${target.firstarray?.join(', ')} - ${target.secondarray?.join(', ')}');
  }
}
补充说明
  • 你的JSON文件中数组末尾多余的尾随逗号不影响Dart原生json解码器的解析,若需要多端兼容可手动删除
  • 整数类型值(比如你数组里的27)调用toDouble()后会转为27.0,属于正常类型转换,若需要格式化显示为整数可自行处理数值展示逻辑
  • 修复后运行代码,控制台将输出符合预期的结果:
flutter: 8 - 26.6, 27.0, 26.6, 22.9, 27.1, 26.8 - 26.6, 27.0, 26.6, 22.9, 27.1, 26.8

内容的提问来源于stack exchange,提问作者CDC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:36:21