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

Dart解析多成员JSON报FormatException如何解决?

报错原因

你当前获取到的响应内容不是标准合法的JSON结构:它是多个独立JSON对象用逗号直接拼接的片段,缺少JSON数组要求的最外层[]包裹。
标准JSON语法仅支持解析单个合法值(单个对象、字符串、数字、布尔值、null),或是用方括号包裹的数组值。当响应只有1个对象时,本身属于合法单个JSON值,所以jsonDecode可以正常运行;当有多个对象用逗号拼接时,解析器读完第一个对象的闭合}后,后续的逗号和下一个对象不属于合法的单值结构,就会抛出你遇到的 FormatException 异常。

修复方法

只需要把原始响应字符串补全为合法的JSON数组格式,再调用解码方法即可,参考实现代码(Dart):

import 'dart:convert';

// 读取原始响应内容
final rawStr = response.body;
// 清理首尾空白、末尾可能存在的多余尾逗号,避免特殊格式导致解析失败
final cleanedStr = rawStr.trim().replaceFirst(RegExp(r',\s*$'), '');
// 给处理后的字符串外层包裹方括号,拼接为符合规范的JSON数组
final validJsonArray = '[$cleanedStr]';
// 正常解码即可,返回结果为对应对象的数组列表
List<dynamic> parseResult = jsonDecode(validJsonArray);

// 若需要强类型支持,可将数组内的每个Map元素转换为自定义业务模型
// 示例:List<User> userList = parseResult.map((item) => User.fromJson(item)).toList();
注意事项
  • 如果后端接口支持调整,优先推动接口返回标准JSON数组格式(自带最外层[]),不需要前端额外做字符串修正,兼容性更好
  • 如果接口无法修改,上述字符串处理方案可以覆盖绝大多数多对象拼接的响应解析场景,尾逗号清理步骤不要省略,避免最后一个对象后多余的逗号触发新的格式异常

内容的提问来源于stack exchange,提问作者Ariel Soriano Vassia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:42:16