Flutter本地读写JSON文件缺失引号问题求助
解决JSON序列化无引号导致的FormatException问题
老兄,你的问题根源出在保存JSON的方式上——你现在用playerList.toJson().toString()来生成要写入文件的内容,但这个toString()是Dart Map自带的字符串输出,它不会给键添加双引号,自然不符合标准JSON格式,读取时就会触发FormatException。
正确的保存方式
你完全不需要手动给JSON加引号,只需要用Dart内置的jsonEncode函数(来自dart:convert包)来序列化toJson()返回的Map,这样就能生成标准的带双引号的JSON字符串了。
修改你的writePlayerData方法:
import 'dart:convert'; // 别忘了导入这个核心包 Future<File> writePlayerData(PlayerList playerList) async { final file = await _localFile; // 用jsonEncode替代toString(),生成标准JSON return file.writeAsString(jsonEncode(playerList.toJson())); }
为什么这样有效?
- JsonSerializable生成的
toJson()方法只是把对象转换成了Map<String, dynamic>类型的Dart数据结构,并不是直接生成JSON字符串。 jsonEncode函数会严格按照JSON规范处理这个Map:自动给所有键、字符串类型的值加上双引号,完美匹配你期望的格式。
修改后,保存的JSON内容就会变成你想要的样子:
{ "players": [ { "id": "Filler Character", "setCount": "0 - 0", "characters": { "char1": "", "char2": "" }, "notes": "Filler Character" } ] }
这样再调用readPlayerData的时候,jsonDecode就能正常解析,不会再抛出FormatException了。
内容的提问来源于stack exchange,提问作者Ayren King
相关产品推荐
相关产品推荐

