irpas技术客

Flutter中的JSON解析_一杯清泉_flutter json

网络投稿 967

????????在客户端开发的过程中,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‘


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Flutter #JSON