添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

顾名思义,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;
什么是JSONJSON是一种轻量级的数据交换语言,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&lt;CardBean&gt; cardbeanList = responseJson.map((m) =&gt; 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),