flutter 解析json另类封装方式 List<bean>,哈哈哈
flutter 解析json另类封装方式,哈哈哈
(图片来源网络,侵删)
日常学习,仅供参考,不喜 勿喷
http请求数据泛型解析封装,需要判断泛型数据类型再根据类型解析,本文只抽取了list演示
核心代码
import 'dart:convert';
import 'package:webwsyn/http/bean/login_list.dart';
import 'package:webwsyn/http/bean/model.dart';
class ttzq {
Future listPost(
String data, T Function(dynamic data) parseModel) async {
try {
final jsonMap = jsonDecode(data);
print('接收数据:' + data);
Model response1 = Model.fromJson(jsonMap);
List list = response1.data as List;
return list.map((e) => parseModel(e)).toList();
} catch (e) {
throw Exception('Failed to send POST request ${e}');
}
}
Future listPost2(
String data, T Function(dynamic data) parseModel) async {
try {
final jsonMap = jsonDecode(data);
Model response1 = Model.fromJson(jsonMap);
return parseModel(response1.data);
} catch (e) {
throw Exception('Failed to send POST request ${e}');
}
}
Future listPost3(String data) async {
try {
final jsonMap = jsonDecode(data);
Model response1 = Model.fromJson(jsonMap);
return response1.data as T;
//return parseModel(response1.data);
} catch (e) {
throw Exception('Failed to send POST request ${e}');
}
}
}
///测试方法
Future main() async {
/// List ==========================================================================
String jsonData =
'{"code":200,"message":"操作成功","isboolean":true,"data":[{"id":1,"name":"admin","password":"123456"},{"id":2,"name":"admin","password":"123456"}]}';
ttzq()
.listPost(jsonData, (data) => LoginList.fromJson(data))
.then((value) {
//print(value[0].password);
// 打印返回的数据
value.forEach((element) {
print(element.toJson());
});
});
/// ==========================================================================
String jsonData2 = '{"code":200,"message":"操作成功","isboolean":true,"data":{"id":1,"name":"admin","password":"123456"}}';
ttzq().listPost2(jsonData2,(data) => LoginList.fromJson(data)).then((value) {
print('=============================');
print(value.password);
});
/// // ==========================================================================
///可以转换 数据类型 String int bool
String jsonData3 =
'{"code":200,"message":"操作成功","isboolean":true,"data":true}';
ttzq().listPost3(jsonData3).then((value) {
print("结果:${value}" );
});
return 0;
}
//结构类
//json解析
import 'package:json_annotation/json_annotation.dart';
@JsonSerializable()
class LoginList {
late int id;
late String name;
late String password;
LoginList.fromJson(Map json) {
id = json['id'] as int;
if (json.containsKey('name')) {
name = json['name'] as String;
}
if (json.containsKey('password')) {
password = json['password'] as String;
}
}
Map toJson() =>
{'id': id, 'name': name, 'password': password};
}
//json解析
import 'package:json_annotation/json_annotation.dart';
@JsonSerializable()
class Model {
late bool isboolean;
late int code;
late T data;
late String message;
Model({
required this.isboolean,
required this.code,
required this.data,
required this.message,
});
Model.fromJson(Map json) {
isboolean = json['isboolean'] as bool;
code = json['code'] as int;
if (json.containsKey('message')) {
message = json['message'] as String;
}
if (json.containsKey('data')) {
data = json['data'] as T;
}
}
Map toJson() =>
{'isboolean': isboolean, 'code': code, 'message': message, 'data': data};
}
导入架包
dependencies:
flutter:
sdk: flutter
#json:
json_annotation: ^4.8.0
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
