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

Flutter中如何读取本地嵌套JSON文件的内层值?

解决Flutter读取嵌套JSON内层数据的问题

问题根源

你的JSON是嵌套结构:外层是包含id、created、raw_data数组的对象列表,measurement_id、index等目标字段都在raw_data的子对象里。但你当前的UserModel错误地把内外层字段混在一起,完全没处理raw_data这个嵌套数组,所以拿不到内层数据。

修正方案

拆分模型类,分别对应外层对象和内层的raw_data对象,再正确解析嵌套结构。

1. 重新定义模型类

创建两个模型,分别匹配JSON的层级结构:

// 外层模型:对应JSON中的每个顶级对象
class MeasurementRecord {
  late int id;
  late String created;
  late List<RawData> rawData;

  MeasurementRecord({
    required this.id,
    required this.created,
    required this.rawData,
  });

  MeasurementRecord.fromJson(Map<String, dynamic> json) {
    id = json['id'];
    created = json['created'];
    // 解析raw_data数组,转换为RawData对象列表
    rawData = (json['raw_data'] as List)
        .map((item) => RawData.fromJson(item))
        .toList();
  }
}

// 内层模型:对应raw_data中的每个子对象
class RawData {
  late int measurementId;
  late int index;
  late int substance;
  late int pressure;
  late double temperature;

  RawData({
    required this.measurementId,
    required this.index,
    required this.substance,
    required this.pressure,
    required this.temperature,
  });

  RawData.fromJson(Map<String, dynamic> json) {
    measurementId = json['measurement_id'];
    index = json['index'];
    substance = json['substance'];
    pressure = json['pressure'];
    temperature = json['temperature'].toDouble();
  }
}

2. 修改JSON读取逻辑

更新handler,让它返回新的MeasurementRecord列表:

import 'dart:convert';
import 'package:flutter/services.dart' as rootbundle;
import '../model/measurement_model.dart'; // 导入新模型文件

Future<List<MeasurementRecord>> readJsonData() async {
  final jsondata = await rootbundle.rootBundle.loadString('/userdata.json');
  final list = json.decode(jsondata) as List<dynamic>;
  
  return list.map((e) => MeasurementRecord.fromJson(e)).toList();
}

3. 使用示例

现在可以正常获取内层数据,比如:

// 读取数据并打印内层示例
void fetchData() async {
  List<MeasurementRecord> records = await readJsonData();
  // 打印第一条记录的第一条raw_data数据
  RawData firstRawData = records[0].rawData[0];
  print('measurement_id: ${firstRawData.measurementId}');
  print('temperature: ${firstRawData.temperature}');
}

关键说明

  • 嵌套JSON解析的核心是按层级对应创建模型,外层对象包含内层对象的列表,解析时需遍历内层数组并转换为对应模型实例。
  • 注意JSON字段名和模型属性名的映射(比如raw_data转rawData、measurement_id转measurementId),保持命名规范的同时确保对应关系正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 16:40:38