Flutter JSON数据生成插件json_dart_generator的使用

Flutter JSON数据生成插件json_dart_generator的使用

json_dart_generator

Pub

将JSON数据转换为Dart类。

支持多种格式(数组根节点/多个数组)。当数组中的元素类型不同时,会尽可能将其转换为相互包含的类型。如果它们不能相互包含,则将以动态方式显示,并且不再分析底层元素。

示例:元素类型将为List<String>

{
  "element": [
    10,
    10.0,
    true,
    "20"
  ]
}

示例:元素类型将为List<dynamic>

{
  "element": [
    10,
    {
      "byebye": 10
    }
  ]
}

使用方法

1. 将此包作为库使用

dependencies中添加json_dart_generator

dev_dependencies:
  json_dart_generator: any

示例代码:

import 'package:json_dart_generator/json_dart_generator.dart';

void main(List<String> args) {
  var jsonText = '''
[
  [
    {
      "aa": "cc",
      "bb": true,
      "cc": {
        "ilis": [
          10,
          20,
          30.0
        ]
      }
    }
  ]
]
  ''';

  var generator = DartCodeGenerator(
    rootClassName: 'Root', // 根类名
    rootClassNameWithPrefixSuffix: true, // 根类名是否包含前缀或后缀
    classPrefix: 'Hi', // 类名前缀
    classSuffix: 'Go', // 类名后缀
  );

  // 调用generate方法生成代码
  var code = generator.generate(jsonText);
  print(code);
}
2. 将此包作为可执行文件使用
激活包
dart pub global activate json_dart_generator
运行
json_dart_generator -f {json source path} -o {output path}
命令行参数
-f, --file           JSON源文件
-o, --output         输出Dart代码路径(包括文件名)
-n, --name           根类名(默认值:Root)
-p, --name_prefix    类名前缀
-s, --name_suffix    类名后缀
-h, --[no-]help      帮助信息

更多关于Flutter JSON数据生成插件json_dart_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JSON数据生成插件json_dart_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


json_dart_generator 是一个用于生成 Dart 数据模型类和 JSON 序列化/反序列化代码的 Flutter 插件。它可以帮助开发者快速地将 JSON 数据转换为 Dart 对象,并自动生成相关的代码。

安装和使用步骤

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 json_dart_generatorbuild_runner 作为开发依赖:

dev_dependencies:
  json_dart_generator: ^2.0.0
  build_runner: ^2.0.0

2. 创建数据模型类

创建一个 Dart 文件,例如 user.dart,并定义你的数据模型类。使用 @JsonSerializable 注解来标记需要生成 JSON 序列化/反序列化代码的类。

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  final String name;
  final int age;
  final String email;

  User({required this.name, required this.age, required this.email});

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}

3. 生成代码

在终端中运行以下命令来生成 JSON 序列化/反序列化代码:

flutter pub run build_runner build

这个命令会生成一个 user.g.dart 文件,其中包含了 User 类的 fromJsontoJson 方法。

4. 使用生成的代码

现在你可以使用生成的代码来将 JSON 数据转换为 Dart 对象,或者将 Dart 对象转换为 JSON 数据。

void main() {
  // JSON to Dart object
  String jsonString = '{"name": "John", "age": 30, "email": "john@example.com"}';
  Map<String, dynamic> json = jsonDecode(jsonString);
  User user = User.fromJson(json);
  
  print(user.name); // Output: John

  // Dart object to JSON
  Map<String, dynamic> jsonMap = user.toJson();
  print(jsonEncode(jsonMap)); // Output: {"name":"John","age":30,"email":"john@example.com"}
}

其他功能

  • 自定义字段名称:如果你需要将 JSON 中的字段名称与 Dart 类的字段名称进行映射,可以使用 @JsonKey 注解。
@JsonSerializable()
class User {
  @JsonKey(name: 'full_name')
  final String name;
  final int age;
  final String email;

  User({required this.name, required this.age, required this.email});

  factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);

  Map<String, dynamic> toJson() => _$UserToJson(this);
}
  • 生成枚举映射:如果你有枚举类型,可以使用 [@JsonValue](/user/JsonValue) 注解来映射 JSON 中的值。
enum Status {
  [@JsonValue](/user/JsonValue)('active')
  active,
  [@JsonValue](/user/JsonValue)('inactive')
  inactive,
}
回到顶部