import 'dart:convert';
import 'dart:io';
Future main() async {
String filePath = "D:\\FlutterProject\\suzhou_bridge_2023\\lib\\services"
"\\frequent_inspection\\frequent_inspection_disease_data_test.dart";
var file = File(filePath);
List classNames = [];
Stream> inputStream = file.openRead();
List trueLines = [];
var lines = utf8.decoder
.bind(inputStream)
.transform(const LineSplitter());
try {
await for (final line in lines) {
trueLines.add(line);
if(RegExp(r'class [a-zA-Z0-9]* extends Object').hasMatch(line)){
classNames.add(line.split(" ")[1]);
}
}
// print(classNames);
// print(trueLines);
String fileStr = "import 'dart:core';\nimport 'package:json_annotation/json_annotation.dart';\n\n";
for(var className in classNames){
fileStr = fileStr+_getClassAndPara(className,trueLines);
}
// print(fileStr);
await file.delete();
try{
File file2 = File(filePath);
await file2.writeAsString(fileStr);
}catch (e) {
// print(e);
}
} catch (e) {
// print(e);
}
}
String _getClassAndPara(String classN,List trueLines){
int startMark = 0;
int endMark = 0;
List paras = [];
for(int i=0;i').hasMatch(para)){
fromJson = "$fromJson ${para.split(" ")[0]} ${para.split(" ")[1]};\n";
fromJson = "$fromJson if(json['${para.split(" ")[1]}'] == null){\n ${para.split(" ")[1]} = [];\n }\n";
if(para.contains("String?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as String).toList();\n }\n\n";
}
else if(para.contains("int?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as int).toList();\n }\n\n";
}
else if(para.contains("double?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as double).toList();\n }\n\n";
}
else if(para.contains("bool?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as bool).toList();\n }\n\n";
}
else{
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:${para.split(" ")[0].split("<")[1].split("?")[0]}.fromJson(e as Map)).toList();\n }\n\n";
}
}
}
fromJson = "$fromJson return $classN(\n";
for(var para in paras){
if(RegExp(r'List<[a-zA-Z]*\??>').hasMatch(para)){
fromJson = "$fromJson ${para.split(" ")[1]},\n";
}else if(para.contains("String?")||para.contains("int?")||para.contains("double?")||para.contains("bool?")){
fromJson = "$fromJson json['${para.split(" ")[1]}'],\n";
}else{
fromJson = "$fromJson ${para.split("?").first}.fromJson(json['${para.split(" ")[1]}']),\n";
}
toJson = "$toJson '${para.split(" ")[1]}': instance.${para.split(" ")[1]},\n";
}
fromJson = "$fromJson );\n}\n";
toJson = "$toJson };\n\n";
String lastStr = "";
for(int i=startMark;i
Future<void> main() async {
String filePath = "D:\\FlutterProject\\suzhou_bridge_2023\\lib\\services"
"\\frequent_inspection\\frequent_inspection_disease_data_test.dart";
var file = File(filePath);
List<String> classNames = [];
Stream<List<int>> inputStream = file.openRead();
List<String> trueLines = [];
.transform(const LineSplitter());
await for (final line in lines) {
if(RegExp(r'class [a-zA-Z0-9]* extends Object').hasMatch(line)){
classNames.add(line.split(" ")[1]);
String fileStr = "import 'dart:core';\nimport 'package:json_annotation/json_annotation.dart';\n\n";
for(var className in classNames){
fileStr = fileStr+_getClassAndPara(className,trueLines);
File file2 = File(filePath);
await file2.writeAsString(fileStr);
String _getClassAndPara(String classN,List<String> trueLines){
for(int i=0;i
if(trueLines[i].contains(classN) && trueLines[i-1].contains("@JsonSerializable()")){
for(int i=startMark;i
if(trueLines[i].contains("}")){
for(int i=startMark;i<=endMark;i++){
if(trueLines[i].contains("@JsonKey()") && i
paras.add(trueLines[i+1].trim().replaceAll(";", ""));
String factory1 = " factory $classN.fromJson(Map json)=> _\$${classN}FromJson(json);\n";
String factory2 = " Map toJson() => _\$${classN}ToJson(this);\n}\n";
String fromJson = "$classN _\$${classN}FromJson(Map json){\n";
String toJson = "Map _\$${classN}ToJson($classN instance) =>\n {\n";
if(RegExp(r'List<[a-zA-Z]*\??>').hasMatch(para)){
fromJson = "$fromJson ${para.split(" ")[0]} ${para.split(" ")[1]};\n";
fromJson = "$fromJson if(json['${para.split(" ")[1]}'] == null){\n ${para.split(" ")[1]} = [];\n }\n";
if(para.contains("String?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as String).toList();\n }\n\n";
else if(para.contains("int?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as int).toList();\n }\n\n";
else if(para.contains("double?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as double).toList();\n }\n\n";
else if(para.contains("bool?")){
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:e as bool).toList();\n }\n\n";
fromJson = "$fromJson else{\n ${para.split(" ")[1]} = (json['${para.split(" ")[1]}'] as List).map((e) => e == null? null:${para.split(" ")[0].split("<")[1].split("?")[0]}.fromJson(e as Map)).toList();\n }\n\n";
fromJson = "$fromJson return $classN(\n";
if(RegExp(r'List<[a-zA-Z]*\??>').hasMatch(para)){
fromJson = "$fromJson ${para.split(" ")[1]},\n";
}else if(para.contains("String?")||para.contains("int?")||para.contains("double?")||para.contains("bool?")){
fromJson = "$fromJson json['${para.split(" ")[1]}'],\n";
fromJson = "$fromJson ${para.split("?").first}.fromJson(json['${para.split(" ")[1]}']),\n";
toJson = "$toJson '${para.split(" ")[1]}': instance.${para.split(" ")[1]},\n";
fromJson = "$fromJson );\n}\n";
toJson = "$toJson };\n\n";
for(int i=startMark;i
lastStr = "$lastStr${trueLines[i]}\n";
return ("$lastStr$factory1$factory2\n$fromJson\n$toJson");
-
相关阅读:
Linux系统上安装python详细步骤
吃透Chisel语言.34.Chisel进阶之硬件生成器(三)——利用面向对象编程特性:以Ticker为例
Vue 组件之间的通信,动态组件和插槽
actuator--基础--07--自定义Endpoint
道可云元宇宙每日资讯|第二届世界元宇宙大会将在嘉定安亭举行
谁说爬虫只能Python?看我用C#快速简单实现爬虫开发和演示!
Kotlin Multiplatform稳定版本发布:加速跨平台开发的新里程碑
半自动ORM—mybatis
什么是SDN?用一篇文章彻底讲明白 SDN 软件定义网络是什么!
空间复杂度
-
原文地址:https://blog.csdn.net/weixin_38264564/article/details/132710379