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

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序列化与反序列化:

  1. 存入前先将Map序列化为JSON字符串
  2. 读取后将字符串反序列化为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:48:05