我想在颤动中将字符串转换为 Json 字符串?
Posted
技术标签:
【中文标题】我想在颤动中将字符串转换为 Json 字符串?【英文标题】:i want to convert String into Json string in flutter? 【发布时间】:2021-06-04 05:09:55 【问题描述】:我已经解码了我的response.body
即var jsonData = jsonDecode(response.body);
并且它工作正常
但是当我像这样使用sharedpref
将它转换成对象并保存到本地存储中时
if (response.statusCode == 200)
jsonData['categoryList'].forEach((data) =>
categoryList.add(new ExpertCategory(
id: jsonData['_id'],
color: jsonData['color'],
type: jsonData['category_name'],
icon: ":)"))
);
print(categoryList) ;
localStorage.setCategoryData(categoryList.toString());
它存储在其中每当我尝试对其进行解码时,它都无法正常工作,即
localStorage.getCategoryData().then((data) =>
userMap = jsonDecode(data),
);
class LocalStorage
Future setCategoryData(data) async
final prefs = await SharedPreferences.getInstance();
prefs.setString('category', data);
Future getCategoryData() async
final prefs = await SharedPreferences.getInstance();
final category = prefs.getString('category');
return category;
import 'package:flutter/foundation.dart';
class ExpertCategory
final String id;
final String type;
final String icon;
final String color;
const ExpertCategory(
@required this.id,
@required this.type,
@required this.icon,
@required this.color,
);
它与以前不同,它显示错误并且在修复字符串'['的一些第一个元素之后 正在显示。请提前帮助解决这个问题。
【问题讨论】:
您遇到的错误是什么?还可以在通过 jsonDecode 传递变量之前尝试打印变量的类型,以确保它实际上是字符串,data.runtimeType 参考:programming-idioms.org/idiom/94/print-type-of-variable/2210/… 如果是字符串,请尝试打印它,确保它是有效的 json 请分享您的 localStorage 类的完整代码,显示您用于存储数据的方法以及如何检索它们。 @AliAlNoaimi userMap = jsonEncode(data), userMap1 = jsonDecode(userMap), print(userMap1[0]), I/flutter (25831): [如果我在该函数下执行此操作 userMap1 = jsonDecode (数据),打印(userMap1 [0]),给出这个[错误:flutter/lib/ui/ui_dart_state.cc(177)]未处理的异常:FormatException:意外字符(在字符2处)E/flutter(25831):[ “ExpertCategory”实例、“ExpertCategory”实例、“E..”实例 @Omotayo4i 我已经编辑了我的问题。 @JayParmar 提供ExpertCategory类的完整代码 【参考方案1】:将您的 ExpertCategory 模型更改为:
import 'package:flutter/material.dart';
class ExpertCategory
String id;
String type;
String icon;
String color;
ExpertCategory(
@required this.id,
@required this.type,
@required this.icon,
@required this.color);
ExpertCategory.fromJson(Map<String, dynamic> json)
id = json['id'];
type = json['type'];
icon = json['icon'];
color = json['color'];
Map<String, dynamic> toJson()
final Map<String, dynamic> data = new Map<String, dynamic>();
data['id'] = this.id;
data['type'] = this.type;
data['icon'] = this.icon;
data['color'] = this.color;
return data;
对于您的LocalStorage
类,有两种方法可以将您的数据设置为SharedPreferences
。一个使用setString
,另一个是setStringList
,因为您正在存储类别列表。
查看以下两种方法。
方法 1
class LocalStorage
Future setCategoryData(List<ExpertCategory> data) async
final prefs = await SharedPreferences.getInstance();
prefs.setString(
'category', jsonEncode(data.map((e) => e.toJson()).toList()));
Future<List<ExpertCategory>> getCategoryData() async
final prefs = await SharedPreferences.getInstance();
final category = prefs.getString('category');
return List<ExpertCategory>.from(
List<Map<String, dynamic>>.from(jsonDecode(category))
.map((e) => ExpertCategory.fromJson(e))
.toList());
方法 2
class LocalStorage
Future setCategoryData(List<ExpertCategory> data) async
final prefs = await SharedPreferences.getInstance();
prefs.setStringList('category',
List<String>.from(data.map((e) => jsonEncode(e.toJson())).toList()));
Future<List<ExpertCategory>> getCategoryData() async
final prefs = await SharedPreferences.getInstance();
final category = prefs.getStringList('category');
return List<ExpertCategory>.from(
category.map((e) => ExpertCategory.fromJson(jsonDecode(e))).toList());
最后你将数据设置到SharedPreferences
使用
localStorage.setCategoryData(categoryList);
【讨论】:
以上是关于我想在颤动中将字符串转换为 Json 字符串?的主要内容,如果未能解决你的问题,请参考以下文章
如何在颤动中将 List<String> 转换为 String [重复]
如何在 Spring Boot 中将输入字符串转换为 json 字符串或 json 对象