Flutter中JSON解码结果不一致问题求助
Flutter中打印JSON Map导致格式无效的问题解决方法
问题本质
你遇到的核心问题是:直接print(map)输出的不是标准JSON格式,而是Dart中Map对象的字符串化结果,和JSON语法存在差异,因此JSON美化工具会判定格式无效。
原因分析
Dart里调用print(map)时,实际执行的是Map.toString()方法,输出的字符串存在这些不符合JSON规范的地方:
- 键名没有双引号(JSON要求键必须用双引号包裹)
- 部分场景下字符串可能用单引号(JSON只允许双引号)
- 特殊字符的转义逻辑和JSON不完全一致
而你访问map['name']能正常输出,是因为jsonDecode已经把JSON转成了Dart原生的Map对象,取属性是直接操作对象,和JSON格式无关,所以不受影响。
解决方法
要输出标准可解析的JSON,需要把Dart的Map对象重新编码为JSON字符串:
方法1:输出压缩格式的标准JSON
getData().then((value) { var map = jsonDecode(value!); print(jsonEncode(map)); // 输出符合规范的JSON字符串 });
方法2:输出带缩进的格式化JSON(更易读)
如果需要可读性更强的格式化输出,可以用带缩进的编码器:
import 'dart:convert'; getData().then((value) { var map = jsonDecode(value!); var formattedJson = JsonEncoder.withIndent(' ').convert(map); print(formattedJson); });
验证
用以上方法输出后,复制结果到JSON美化工具就能正常解析。比如你提供的示例数据,编码后会输出标准JSON格式,完全符合工具的校验要求。
内容的提问来源于stack exchange,提问作者flutter app
相关产品推荐
相关产品推荐

