在共享首选项中解码存储的 json 结果字符串
Posted
技术标签:
【中文标题】在共享首选项中解码存储的 json 结果字符串【英文标题】:decode stored json result string in shared preferences 【发布时间】:2021-12-16 18:25:44 【问题描述】:当应用程序启动时,它会触发 API 调用,在我的情况下,我想存储响应数据以供以后使用,因此我为此使用了共享首选项并将响应数据存储为字符串。现在我想从共享首选项中存储的字符串中正确解码要使用的数据。
这是我如何将数据转换为字符串,
SharedPreferences prefs = await SharedPreferences.getInstance();
Response response = await _dio.post(
_baseUrl,
data: "index": indexNum, "password": password,
options: Options(contentType: Headers.formUrlEncodedContentType),
);
if (response.statusCode == 200)
var result = response.data;
//convert result data to string
var resultData = Result.encode(result);
// store the resultData in shared_preferences
prefs.setString('results', resultData);
编码方法,
class Result
Result(
required this.table,
required this.data,
);
String table;
List<Data> data;
factory Result.fromJson(Map<String, dynamic> json) => Result(
table: json["table"],
data: List<Data>.from(json["data"].map((x) => Data.fromJson(x))),
);
//encode method
static String encode(List<dynamic> results) => json.encode(
results.map((result) => result.toString()).toList(),
);
这是我从字符串中解码数据的方法,
getData() async
SharedPreferences prefs = await SharedPreferences.getInstance();
String? resultData = prefs.getString('results');
List<dynamic> decodedJson = jsonDecode(resultData!);
print(decodedJson);
结果数据字符串,
解码后的结果数据字符串,
我是 Flutter 的新手,我想要的是从模型中解码这些数据的正确方法。以下是我的模型类。
import 'dart:convert';
class Result
Result(
required this.table,
required this.data,
);
String table;
List<Data> data;
factory Result.fromJson(Map<String, dynamic> json) => Result(
table: json["table"],
data: List<Data>.from(json["data"].map((x) => Data.fromJson(x))),
);
static String encode(List<dynamic> results) => json.encode(
results.map((result) => result.toString()).toList(),
);
class Data
Data(
required this.subjectName,
required this.year,
required this.credits,
required this.sOrder,
required this.result,
required this.onlineAssignmentResult,
);
String subjectName;
String year;
String credits;
String sOrder;
String result;
String onlineAssignmentResult;
factory Data.fromJson(json) => Data(
subjectName: json["subject_name"],
year: json["year"],
credits: json["credits"],
sOrder: json["s_order"],
result: json["result"],
onlineAssignmentResult: json["online_assignment_result"],
);
感谢您的时间和帮助。
【问题讨论】:
【参考方案1】:您的 JSON 语法错误,Flutter 无法使用 jsonDecode() 进行解码
所有字符串和变量名都需要用"或'括起来
即subject_name: 应该是 "subject_name":
【讨论】:
以上是关于在共享首选项中解码存储的 json 结果字符串的主要内容,如果未能解决你的问题,请参考以下文章
如何将字符串从共享首选项转换为 MutableList<LatLng> 对以在 kotlin 中绘制折线?