You need to enable JavaScript to run this app. Flutter中如何解析字符串化JSON 将String类型field字段转为列表
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何解析字符串化JSON 将String类型field字段转为列表

你遇到的问题本质是后端返回的field字段是嵌套序列化的JSON字符串,不是标准JSON数组,所以第一次解析整段响应时只会被识别为String类型,需要做二次反序列化即可转为可用列表。

解决步骤

1. 导入系统转换依赖

在对应Dart文件头部引入内置转换库:

import 'dart:convert';

2. 首次解析根响应数据

先把整段响应字符串转为Map结构:

// 解析根级响应
Map<String, dynamic> rootData = jsonDecode(response);
// 取出value节点
Map<String, dynamic> valueData = rootData['value'];
// 此时拿到的field为字符串类型
String fieldStr = valueData['field'];

3. 二次解析field得到目标列表

对拿到的fieldStr再次调用反序列化方法,即可得到列表结构:

// 二次反序列化field字符串为List
List<dynamic> fieldList = jsonDecode(fieldStr);
// 可直接遍历使用,也可进一步转为实体类列表提升类型安全性

可选:定义对应实体类(推荐)

如果需要类型安全的字段访问,可定义对应Field实体类:

class Field {
  final int fieldId;
  final String fieldName;
  final String fieldElementType;
  final String fieldLabel;
  final String discription;
  final bool isDeleted;
  final String createdDateUTC;

  Field({
    required this.fieldId,
    required this.fieldName,
    required this.fieldElementType,
    required this.fieldLabel,
    required this.discription,
    required this.isDeleted,
    required this.createdDateUTC,
  });

  factory Field.fromJson(Map<String, dynamic> json) {
    return Field(
      fieldId: json['FieldId'],
      fieldName: json['FieldName'],
      fieldElementType: json['FieldElementType'],
      fieldLabel: json['FieldLabel'],
      discription: json['Discription'],
      isDeleted: json['IsDeleted'],
      createdDateUTC: json['CreatedDateUTC'],
    );
  }
}

定义完成后可直接把动态列表转为实体列表:

List<Field> fieldEntityList = fieldList.map((item) => Field.fromJson(item)).toList();
注意事项
  • 反序列化时字段名大小写要和返回JSON完全匹配,否则会出现解析错误
  • 条件允许的话可以建议后端直接把field返回为JSON数组,减少客户端二次解析的冗余操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:09:03