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

如何将Hive中存储的JSON字符串转换为List<LanguageModel>对象列表

Hive存储字符串转List实现方案

前置要求

你的LanguageModel类需要正确实现fromJson工厂构造方法、toJson实例方法,字段定义要和接口返回的JSON结构完全匹配,示例如下:

import 'dart:convert';

class LanguageModel {
  // 替换为你的模型实际字段
  final int id;
  final String languageName;
  final String languageCode;

  LanguageModel({
    required this.id,
    required this.languageName,
    required this.languageCode,
  });

  // 反序列化用:JSON转模型
  factory LanguageModel.fromJson(Map<String, dynamic> json) {
    return LanguageModel(
      id: json['id'] as int,
      // 字段名必须和接口返回的key完全一致,大小写也要匹配
      languageName: json['language_name'] as String,
      languageCode: json['language_code'] as String,
    );
  }

  // 序列化用:模型转JSON,你存数据到Hive时会用到
  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'language_name': languageName,
      'language_code': languageCode,
    };
  }
}

转换实现步骤

1. 确认存储逻辑正确(排查转换失败的常见原因)

存数据到Hive时要先序列化再存储,正确逻辑示例:

// 拿到接口返回的原始列表
List<LanguageModel> originList = 接口响应的列表数据;
// 先把模型列表转成JSON数组再编码为字符串
String storeStr = jsonEncode(originList.map((e) => e.toJson()).toList());
// 存入Hive,替换为你自己的Box名和存储key
await Hive.box('configBox').put('language_list', storeStr);

2. 取出数据并反序列化为List

// 从Hive取出存储的字符串
final box = Hive.box('configBox');
String? jsonStr = box.get('language_list');

List<LanguageModel> resultList = [];
if (jsonStr != null) {
  // 第一步:把字符串解码为List<dynamic>类型的JSON数组
  List<dynamic> jsonArray = jsonDecode(jsonStr);
  // 第二步:遍历数组每一项转成LanguageModel
  resultList = jsonArray.map((item) => LanguageModel.fromJson(item)).toList();
}

// 得到的resultList可直接传给Widget使用

常见异常排查

  • 类型转换错误:如果接口返回的字段类型和你定义的模型字段类型不匹配,比如数字以字符串格式返回,需要手动处理类型转换,示例:id: int.parse(json['id'] as String)
  • 空值异常:如果接口可能返回空字段,需要添加空判断处理,示例:languageName: json['language_name'] ?? '默认值'
  • 字段不匹配:如果fromJson里的key和接口返回的key大小写、拼写不一致,会导致取值为空或者抛异常,需逐一核对字段

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:54:02