Flutter JSON文件中的值是否需要添加引号?
Flutter中JSON文件的键是否需要添加引号?
首先明确:标准JSON的语法规则要求,所有键必须用双引号包裹,比如{"count": 3}才是合法的JSON格式;而{count: 3}是Dart中Map对象的字符串表现形式,不属于标准JSON,这也是你后续调用jsonDecode解析失败的根本原因。
看你代码里的问题:在CounterStorage的writeJson方法中,你通过counter.toJson().toString()来生成要写入文件的字符串。这里的toString()是Dart Map类的默认方法,它输出的是Dart风格的Map字符串(不带引号的键),而非符合规范的JSON字符串。
修复方案
把toString()替换为dart:convert中的jsonEncode方法,它会将Map序列化为标准JSON格式:
Future<File> writeJson(CounterModel counter) async { final file = await _localFile; final stringToWrite = JSON.jsonEncode(counter.toJson()); // 使用jsonEncode生成标准JSON return file.writeAsString(stringToWrite); }
总结
- JSON文件的键必须加双引号,这是JSON语法的强制要求,和Flutter无关
- 你之前的解析失败,是因为写入的不是标准JSON字符串,改用
jsonEncode就能生成合法的{"count": 3}格式,保证后续可以正常解析
内容的提问来源于stack exchange,提问作者Sam7919
相关产品推荐
相关产品推荐

