• Flutter Json解析工具


    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 
    
    1. import 'dart:convert';
    2. import 'dart:io';
    3. Future<void> main() async {
    4. String filePath = "D:\\FlutterProject\\suzhou_bridge_2023\\lib\\services"
    5. "\\frequent_inspection\\frequent_inspection_disease_data_test.dart";
    6. var file = File(filePath);
    7. List<String> classNames = [];
    8. Stream<List<int>> inputStream = file.openRead();
    9. List<String> trueLines = [];
    10. var lines = utf8.decoder
    11. .bind(inputStream)
    12. .transform(const LineSplitter());
    13. try {
    14. await for (final line in lines) {
    15. trueLines.add(line);
    16. if(RegExp(r'class [a-zA-Z0-9]* extends Object').hasMatch(line)){
    17. classNames.add(line.split(" ")[1]);
    18. }
    19. }
    20. // print(classNames);
    21. // print(trueLines);
    22. String fileStr = "import 'dart:core';\nimport 'package:json_annotation/json_annotation.dart';\n\n";
    23. for(var className in classNames){
    24. fileStr = fileStr+_getClassAndPara(className,trueLines);
    25. }
    26. // print(fileStr);
    27. await file.delete();
    28. try{
    29. File file2 = File(filePath);
    30. await file2.writeAsString(fileStr);
    31. }catch (e) {
    32. // print(e);
    33. }
    34. } catch (e) {
    35. // print(e);
    36. }
    37. }
    38. String _getClassAndPara(String classN,List<String> trueLines){
    39. int startMark = 0;
    40. int endMark = 0;
    41. List<String> paras = [];
    42. for(int i=0;i
    43. if(trueLines[i].contains(classN) && trueLines[i-1].contains("@JsonSerializable()")){
    44. startMark = i-2;
    45. // startMark = i-1;
    46. break;
    47. }
    48. }
    49. for(int i=startMark;i
    50. if(trueLines[i].contains("}")){
    51. endMark = i;
    52. break;
    53. }
    54. }
    55. // print(startMark);
    56. // print(endMark);
    57. for(int i=startMark;i<=endMark;i++){
    58. if(trueLines[i].contains("@JsonKey()") && i
    59. paras.add(trueLines[i+1].trim().replaceAll(";", ""));
    60. }
    61. }
    62. // print(paras);
    63. String factory1 = " factory $classN.fromJson(Map json)=> _\$${classN}FromJson(json);\n";
    64. String factory2 = " Map toJson() => _\$${classN}ToJson(this);\n}\n";
    65. String fromJson = "$classN _\$${classN}FromJson(Map json){\n";
    66. String toJson = "Map _\$${classN}ToJson($classN instance) =>\n {\n";
    67. // print(paras);
    68. for(var para in paras){
    69. print(para);
    70. /// 首先匹配List的情况
    71. // if(para.contains("List")){
    72. if(RegExp(r'List<[a-zA-Z]*\??>').hasMatch(para)){
    73. fromJson = "$fromJson ${para.split(" ")[0]} ${para.split(" ")[1]};\n";
    74. fromJson = "$fromJson if(json['${para.split(" ")[1]}'] == null){\n ${para.split(" ")[1]} = [];\n }\n";
    75. if(para.contains("String?")){
    76. 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";
    77. }
    78. else if(para.contains("int?")){
    79. 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";
    80. }
    81. else if(para.contains("double?")){
    82. 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";
    83. }
    84. else if(para.contains("bool?")){
    85. 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";
    86. }
    87. else{
    88. 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";
    89. }
    90. }
    91. }
    92. fromJson = "$fromJson return $classN(\n";
    93. for(var para in paras){
    94. if(RegExp(r'List<[a-zA-Z]*\??>').hasMatch(para)){
    95. fromJson = "$fromJson ${para.split(" ")[1]},\n";
    96. }else if(para.contains("String?")||para.contains("int?")||para.contains("double?")||para.contains("bool?")){
    97. fromJson = "$fromJson json['${para.split(" ")[1]}'],\n";
    98. }else{
    99. fromJson = "$fromJson ${para.split("?").first}.fromJson(json['${para.split(" ")[1]}']),\n";
    100. }
    101. toJson = "$toJson '${para.split(" ")[1]}': instance.${para.split(" ")[1]},\n";
    102. }
    103. fromJson = "$fromJson );\n}\n";
    104. toJson = "$toJson };\n\n";
    105. String lastStr = "";
    106. for(int i=startMark;i
    107. lastStr = "$lastStr${trueLines[i]}\n";
    108. }
    109. // print(lastStr + factory1+factory2+"\n"+fromJson+"\n"+toJson);
    110. return ("$lastStr$factory1$factory2\n$fromJson\n$toJson");
    111. // print(toJson);
    112. }

  • 相关阅读:
    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