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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 15:32:50