Flutter中的JSON解析

        在客户端开发的过程中,JSON的序列化与反序列化是一个常见的操作,有非常好用的gson,fastjson。由于Flutter中是禁止使用反射的,所以在flutter中并没有这样的库,所以在flutter中使用json的解析还是比较繁琐的,不像java那么简单。下面总结常用的json解析:

一、使用dart:convert内置库解析

1、示例一

(1)json结构

{
    "callback":"success",
    "data":"张三"
}

(2)将json转为Map

const Map<String, dynamic> json1 = {"callback": "success", "data": "张三"};

(3)创建json的对象,创建解析工厂

class Json1 {

  String? callback;
  String? data;

  Json1({this.callback, this.data});

  factory Json1.fromJson(Map<String, dynamic> json) {
    return Json1(
      callback: json['callback'],
      data: json['data'],
    );
  }
}

(4)打印使用

Json1 j1 = Json1.fromJson(json1);
print(j1.data);
print(j1.callback);

2、示例二

(1)json结构

{
    "callback":"success",
    "data":[
        "张三",
        "李四"
    ]

(2)将json转为Map

const Map<String, dynamic> json2 = {"callback": "success", "data": ["张三", "李四"]};

(3)创建json的对象,创建解析工厂

class Json1 {

  String? callback;
  List<String>? data;

  Json1({this.callback, this.data});

  factory Json1.fromJson(Map<String, dynamic> json) {
    return Json1(
      callback: json['callback'],
      data: json['data'],
    );
  }
}

(4)打印使用

Json1 j1 = Json1.fromJson(json2);
j1.data?.forEach((element) {
	print(element);
});
print(j1.callback);

3、示例三 

{
    "callback":"success",
    "data":{
        "name":"张三",
        "age":30
    }
}

const Map<String, dynamic> json2 = {
  "callback": "success",
  "data": {"name": "张三", "age": 30}
};

class Json1 {
  String? callback;
  Data? data;

  Json1({this.callback, this.data});

  factory Json1.fromJson(Map<String, dynamic> json) {
    return Json1(
      callback: json['callback'],
      data: Data.fromJson(json['data']),
    );
  }
}

class Data {
  String? name;
  int? age;

  Data({ this.name, this.age});

  factory Data.fromJson(Map<String, dynamic> json) {
    return Data(
      name: json['name'],
      age: json['age'],
    );
  }
}

打印:

二、使用工具解析

         工具解析比较复杂的json结构十分的方便,下面介绍两种:

1、使用在线网站解析

https://javiercbk.github.io/json_to_dart/

会自动将json转为dart对象,直接使用。

2、使用Android Studio自带的插件

使用方法:选中包名,右键,选择New->选择插件Json to dart。

这两种方式生成的类一样。

使用方法:

Xxx xx = Xxx.fromJson(json);

注意:参数类型是Map<String, dynamic>形式的,不能是字符串,或者转义字符串,否则报错:

type ‘String‘ is not a subtype of type ‘int‘ of ‘index‘

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值