顾名思义,flutter中的json转化其实涉及到很多方面,如 print打印,toString方法显示、toJson方法显示、序列化和反序列化等等。
其实总结一句话,就是dart类型的
序列化
和
反序列化
,道理类似于java中的Serilazable序列化和反序列化一样的。
直接上代码:
/// 购买时选择的套餐
static savePurchaseWhichItem(PurchaseItem item) async {
if (item != null) {
SharedPreferences preferences = await SharedPreferences.getInstance();
await preferences.setString(
purchase_which_item, jsonEncode(item));
print("sp savePurchaseWhichItem setString = ${jsonEncode(item)}");
例如,我要保存PurchaseItem这个实体类信息,转化为String类型进行保存,用了jsonEncode方法进行转化,那么转化时需要注意几个问题:
1.PurchaseItem类必须要实现toJson方法,而且其中的其他实体类型(IAPItem和ProductType)也必须要实现toJson方法,
2.PurchaseItem实体类和IAPItem实现toJson方法,就是逐个字段进行设置,例如:
final Map<String, dynamic> data = new Map<String, dynamic>();
data['title'] = this.title;
但是enum枚举类型实现序列化和反序列化就麻烦点;
toJson方法:
if (this.productType != null) {
data['productType'] = json.encode(productType.toString());
fromJson方法:
productType = _getProductType(jsonDecode(json['productType'])),
/// 枚举enum类型比较
static ProductType _getProductType(String productTypeStr) {
for (ProductType type in ProductType.values) {
if (type.toString() == productTypeStr) {
return type;
return null;
3.PurchaseItem类必须要实现fromJson方法,而且其中的其他实体类型(IAPItem和ProductType)也必须要实现fromJson方法。
其实刚才这里是利用enum枚举类型的name属性来完成的序列化和反序列化,
还可以有另外一种方式,利用enum枚举类型的index属性类完成:
toJson方法:
if (this.productType != null) {
data['productType'] = json.encode(productType.index);
fromJson方法:
productType = _getProductType(jsonDecode(json['productType'])),
/// 枚举enum类型比较
static ProductType _getProductType(int index) {
return ProductType.values[index];
最后上代码:
PurchaseItem类代码如下,其中包括IAPItem实体类和ProductType枚举类型,所以在序列化和反序列化时需要注意toJson和fromJson方法中item和productType的转化问题;(其中IAPItem类的toJson和fromJson方法就省略了,太长了,就是逐个字段逐个字段的设置和反设置)
class PurchaseItem {
final String title;
final String price;
final String symbol;
final String desc;
final String monthPrice; // 每月的价格
final IAPItem item;
final ProductType productType;
final String source;
PurchaseItem({
this.title,
this.price,
this.symbol,
this.desc,
this.monthPrice,
this.item,
this.productType,
this.source,
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['title'] = this.title;
data['price'] = this.price;
data['symbol'] = this.symbol;
data['desc'] = this.desc;
data['monthPrice'] = this.monthPrice;
if (this.item != null) {
data['item'] = this.item.toJson();
if (this.productType != null) {
data['productType'] = json.encode(productType.toString());
data['source'] = this.source;
return data;
PurchaseItem.fromJSON(Map<String, dynamic> json)
: title = json['title'] as String,
source = json['source'] as String,
price = json['price'] as String,
symbol = json['symbol'] as String,
item = IAPItem.fromJSON(json['item']),
desc = json['desc'] as String,
productType = _getProductType(jsonDecode(json['productType'])),
monthPrice = json['monthPrice'] as String;
/// 枚举enum类型比较
static ProductType _getProductType(String productTypeStr) {
for (ProductType type in ProductType.values) {
if (type.toString() == productTypeStr) {
return type;
return null;
enum ProductType {
month,
threeMonth,
sixMonth,
year,
lifeTime,
顾名思义,flutter中的json转化其实涉及到很多方面,如 print打印,toString方法显示、toJson方法显示、序列化和反序列化等等。其实总结一句话,就是dart类型的序列化和反序列化,道理类似于java中的Serilazable序列化和反序列化一样的。直接上代码:/// 购买时选择的套餐 static savePurchaseWhichItem(PurchaseItem item) async { if (item != null) { Shar...
更好地将ENUM转换为字符串-它还可以处理再次转换!
:fire: :fire: :fire: 无耻的插头! :fire: :fire: :fire:
是否想用dart编写服务器应用程序,例如expressjs? 查看我新的开源软件包Alfred
它能做什么
它需要一个枚举,例如:
enum TestEnum { testValue1 }
并将其转换为
testValue1
还处理骆驼案
输入enum TestEnum { testValue1 }输出Test Value 1
import 'package:enum_to_string/enum_to_string.dart' ;
enum TestEnum { testValue1, testValue2 };
convert (){
String result = EnumToString . convertToString ( TestEn
最近在处理枚举类型的值的时候遇到了很多问题,现在将他们记录下来,一来以后可以增强自己的记忆,二来让自己坚持一个记笔记的好习惯。也可以供大家参考,提出问题,一起探讨。
问题一:如何在实体类中定义枚举类型的字段(直接上代码)
* 定义政府文件的来文单位的枚举类
* @author Administrator
public enum FromUnit {
State
1、在
flutter 项目中的 assets 目录下创建 一个文件夹(名称自定义),然后把
json 文件放到该目录下
2、在 pubspec.yaml 配置文件中 的 assets: 添加引用
- assets/data/planTask.
json
3、创建model 类
class PlanTaskModel {
String title;
String date;
List<PlanTaskModel> child;
bool isUnfold=false;
什么是JSON?
JSON是一种轻量级的数据交换语言,JSON的全称为JavaScript Object Nation(JavaScript 对象表示语法),基于 ECMAScript,存放的是的类似于键值对,本质上来说是javascript的数据类型,是一种轻量级的数据交互格式,简单来说呢,json就是一种在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互。
Flutter该用什么JSON序列化方式?
小型项目:手动序列化;
大型项目:借助插件生成json_serializable和bu
在客户端开发的过程中,JSON的序列化与反序列化是一个常见的操作,有非常好用的gson,fastjson。由于Flutter中是禁止使用反射的,所以在flutter中并没有这样的库,所以在flutter中使用json的解析还是比较繁琐的,不像java那么简单。下面总结常用的json解析:
一、使用dart:convert内置库解析
1、示例一
(1)json结构
"callback":"success",
"data":"张三"
(2)将json转为Map
cons...
直接上代码:
List responseJson = json.decode(response);
List<CardBean> cardbeanList = responseJson.map((m) => new CardBean.fromJson(m)).toList();
CardBean cardBean = cardbeanList.first;
其中response...
import ‘…/models/person.dart’;
// 读取 assets 文件夹中的 person.json 文件
Future _loadPersonJson() async {
return await rootBundle.loadString(‘assets/person.json’);
// 将 json 字符串解析为 Person 对象
Future decodePerson() async {
// 获取本地的 json 字符串
String personJson = awa
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
contentPadding: EdgeInsets.fromLTRB(20.0, 15.0, 20.0, 15.0),