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

嵌套未转义JSON字符串解码遇Format Exception,求解决方法

解决未转义嵌套JSON字符串的解码问题

问题原因

你遇到的格式异常,是因为mat_attributes字段的嵌套JSON字符串未正确转义双引号——外层JSON解析时,会把嵌套JSON里的双引号当成外层字符串的结束标记,直接触发语法错误。

解决方案

方案1:修复源JSON(推荐)

如果能控制生成这段JSON的上游服务,直接将mat_attributes中的嵌套JSON双引号转义(把"替换为\")。修正后的字段示例:

"mat_attributes": "[{\"mat_attribute_id\":\"6904982A-EBA6-4A31-8D38-3B688ADB9D4E\",\"mat_attribute_name\":\"Test2\",\"mat_attribute_desc\":\"Test2\",\"material_id_guid\":\"6A895CC4-4093-4693-85F4-C65693FEB45F\",\"material_id\":\"1194\"},...]"

修正后直接用jsonDecode(result)完成外层解析,之后再对mat_attributes的字符串值执行二次解码:

List decoded = jsonDecode(result);
for (var item in decoded) {
  if (item['mat_attributes'].isNotEmpty) {
    item['mat_attributes'] = jsonDecode(item['mat_attributes']);
  }
}

方案2:预处理字符串(无法修改源JSON时使用)

若无法修改上游生成的JSON,可在解析前通过正则匹配mat_attributes的内容,转义其中的双引号:

// 预处理JSON字符串,修复嵌套JSON的转义问题
String processedResult = result.replaceAllMapped(
  RegExp(r'"mat_attributes":\s*"([^"]+)"'),
  (match) {
    String nestedContent = match.group(1)!;
    String escapedContent = nestedContent.replaceAll('"', '\\"');
    return '"mat_attributes": "$escapedContent"';
  },
);

// 执行正常解码
List decoded = jsonDecode(processedResult);

// 二次解码mat_attributes字段
for (var item in decoded) {
  if (item['mat_attributes'] is String && item['mat_attributes'].isNotEmpty) {
    item['mat_attributes'] = jsonDecode(item['mat_attributes']);
  }
}

注意:该正则方案适用于当前案例的简单结构,若嵌套JSON包含复杂转义逻辑,可能需要更严谨的字符串处理逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:25:26