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

如何在Flutter中使用系统默认方法解析复杂转义JSON数据

问题原因

你遇到的解码失败有两层原因:

  • Dart字符串转义规则问题:你写的'{"a":"{\"b\":7}"}'中,\"在Dart普通单引号字符串里只会被解析为普通双引号,最终传入json.decode的实际字符串是{"a":"{"b":7}"},属于非法JSON格式,不符合JSON的转义规则。
  • 嵌套JSON结构问题:你提供的JSON中a字段的值本身是被序列化后的JSON字符串,外层解码完成后还需要对内层字符串做二次解码才能拿到最终的b字段值。

解决方案

方案1:修正字符串转义符

手动给需要保留给JSON的反斜杠加一层转义:

import 'dart:convert';
void main() {
  // 用\\表示需要保留在JSON中的\转义符
  String a = '{"a":"{\\"b\\":7}"}';
  // 第一次解码外层JSON
  final outerMap = json.decode(a);
  print("外层解析结果:$outerMap");
  // 第二次解码a字段对应的内层JSON字符串
  final innerMap = json.decode(outerMap['a']);
  print("内层b字段的值:${innerMap['b']}");
}

方案2:使用Dart原始字符串(更便捷)

给字符串加r前缀声明为原始字符串,不需要额外转义反斜杠:

import 'dart:convert';
void main() {
  // 原始字符串会保留所有字面量字符,无需手动转义
  String a = r'{"a":"{\"b\":7}"}';
  final outerMap = json.decode(a);
  final innerMap = json.decode(outerMap['a']);
  print("b的值为:${innerMap['b']}");
}

两种方案运行后都可以正常拿到内层的b字段值7。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:39:03