使用方法
1.调用JSONUtil.test() 会自动生成实体类并输出实体类的日志。
测试的JSON字符串
String jsonStr =
"{\"time\":1654650815,\"tags\":[{\"id\":1,\"name\":\"A\",\"colors\":[\"Blue\",\"Green\"]}],\"info\":{\"ID\":1,\"name\":\"Cool\"}}";
以上测试的JSON字符串会输出如下创建实体类的日志。
flutter: class Tags {
int id = 0;
String name = "";
List<dynamic> colors = List.empty(growable: true);
Tags.fromMap(dynamic map){
if(map == null || !(map is Map)){return;}
id = map["id"];
name = map["name"];
colors = map["colors"];
}
static fromList(List list){
List<Tags> datalist = List.empty(growable: true);
if(list == null || list.length==0){
return datalist;
}
for(int i=0;i<list.length;i++){
datalist.add(Tags.fromMap(list[i]));
}
return datalist;
}
}
flutter:
flutter:
flutter: class Info {
int ID = 0;
String name = "";
Info.fromMap(dynamic map){
if(map == null || !(map is Map)){return;}
ID = map["ID"];
name = map["name"];
}
static fromList(List list){
List<Info> datalist = List.empty(growable: true);
if(list == null || list.length==0){
return datalist;
}
for(int i=0;i<list.length;i++){
datalist.add(Info.fromMap(list[i]));
}
return datalist;
}
}
flutter:
flutter: class OuterClass {
int time = 0;
List<Tags> tags = List.empty(growable: true);
Info? info;
OuterClass.fromMap(dynamic map){
if(map == null || !(map is Map)){return;}
time = map["time"];
tags = Tags.fromList(map["tags"]);
info = Info.fromMap(map["info"]);
}
static fromList(List list){
List<OuterClass> datalist = List.empty(growable: true);
if(list == null || list.length==0){
return datalist;
}
for(int i=0;i<list.length;i++){
datalist.add(OuterClass.fromMap(list[i]));
}
return datalist;
}
}
2.将生成的实体类输出日志复制到项目中建立对应的实体类文件。
3.将JSON字符串转换成Map或list调用实体类的相关方法进行转换,便可以在项目中通过实体类访问数据了。
import 'dart:convert';
import './extension/string_extension.dart';
///------------------------------------------
///将JSON字符串生成Dart实体类,并且同时生成赋值方法
///------------------------------------------
class JSONUtil {
static test() {
String jsonStr =
"{\"time\":1654650815,\"tags\":[{\"id\":1,\"name\":\"A\",\"colors\":[\"Blue\",\"Green\"]}],\"info\":{\"ID\":1,\"name\":\"Cool\"}}";
generateClass(jsonStr);
}
static test2() {
String jsonStr =
"{\"time\":1654650815,\"tags\":[{\"id\":1,\"name\":\"A\",\"colors\":[\"Blue\",\"Green\"]}],\"info\":{\"ID\":1,\"name\":\"Cool\"}}";
// dynamic obj = jsonDecode(jsonStr);
// OuterClass map = OuterClass.fromMap(obj);
// print("map = $map.length");
}
static generateClass(String json) {
dynamic obj = jsonDecode(json);
if (obj is Map) {
convertMapToObject(obj, "OuterClass");
} else if (obj is List) {
if (obj.length > 0) {
dynamic temp = obj[0];
if (temp is Map) {
convertMapToObject(temp, "OuterClass");
}
}
}
}
static convertMapToObject(Map map, String mapName) {
//
print("\n\n");
String objectStr = "class $mapName {\n";
String setValue = "";
//属性
for (var key in map.keys) {
dynamic val = map[key];
if (val == null) {
continue;
}
String fieldSt = "";
var keyUpper = key.toString().capitalize();
if (val is int) {
fieldSt = "int $key = 0;";
} else if (val is double) {
fieldSt = "double $key = 0.0;";
} else if (val is String) {
fieldSt = "String $key = \"\";";
} else if (val is Map) {
fieldSt = "$keyUpper? $key;";
convertMapToObject(val, keyUpper);
} else if (val is List) {
List list = val as List;
if (list.length > 0) {
dynamic item = list[0];
if (item is Map) {
convertMapToObject(item, keyUpper);
fieldSt = "List<$keyUpper> $key = List.empty(growable: true);";
} else {
fieldSt = "List<dynamic> $key = List.empty(growable: true);";
}
}
}
if (val is Map) {
setValue = "$setValue $key = $keyUpper.fromMap(map[\"$key\"]);\n";
} else if (val is List) {
if (val.isNotEmpty) {
dynamic item = val[0];
if (item is Map) {
setValue = "$setValue $key = $keyUpper.fromList(map[\"$key\"]);\n";
} else {
setValue = "$setValue $key = map[\"$key\"];\n";
}
}
} else {
setValue = "$setValue $key = map[\"$key\"];\n";
}
objectStr = "$objectStr $fieldSt \n";
}
//数据赋值
//Map
objectStr =
"$objectStr\n $mapName.fromMap(dynamic map){\n if(map == null || !(map is Map)){return;} \n$setValue\n}";
//List
objectStr = """$objectStr\n static fromList(List list){\n
List<$mapName> datalist = List.empty(growable: true);
if(list == null || list.length==0){
return datalist;
}
for(int i=0;i<list.length;i++){\n
datalist.add($mapName.fromMap(list[i]));
}
return datalist;
\n}""";
objectStr = "$objectStr\n}";
print(objectStr);
print("\n\n");
}
}