????????在客户端开发的过程中,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.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |