Flutter Session存储JSON数组后读取为字符串问题求助
问题描述
在Flutter中使用FlutterSession存入一个Map对象(预期作为JSON对象存储),但读取后显示为无双引号的字符串,而非标准JSON格式。相关代码如下:
var login_data = {"success":1, "user":{"id":"13","firstname":"Reda","lastname":"Estyu"},"shop_name":"Market"}; await FlutterSession().set('session_data', login_data); var get_data = await FlutterSession().get("session_data"); print(get_data);
读取后的输出结果:{success:1, user:{id:13,firstname:Reda,lastname:Estyu},shop_name :Market}
问题原因
你直接存入的是Dart原生的Map对象,FlutterSession在存储这类对象时,会调用其默认的toString()方法生成字符串。而Dart中Map的toString()输出格式并非标准JSON,它不会为键和字符串类型的值添加双引号,所以才会出现你看到的结果。
解决办法
要存储标准JSON格式的数据,需要手动进行JSON序列化与反序列化:
- 存入前先将Map序列化为JSON字符串
- 读取后将字符串反序列化为Map对象
修改后的代码示例:
import 'dart:convert'; // 定义原始数据 var login_data = {"success":1, "user":{"id":"13","firstname":"Reda","lastname":"Estyu"},"shop_name":"Market"}; // 序列化为标准JSON字符串后存入Session var jsonLoginData = jsonEncode(login_data); await FlutterSession().set('session_data', jsonLoginData); // 读取字符串并反序列化为Map var storedJsonStr = await FlutterSession().get("session_data"); var get_data = jsonDecode(storedJsonStr); print(get_data); // 此时输出会是带双引号的标准JSON格式,或打印为Dart Map的规范格式
这样处理后,你就能得到符合预期的JSON格式数据,后续也能正常对数据进行解析和使用。
内容的提问来源于stack exchange,提问作者JuniorJ
相关产品推荐
相关产品推荐

