Flutter JSON生成插件otter_json_generator的使用

Flutter JSON生成插件otter_json_generator的使用

Otter JSON

Otter JSON

Maintenance Status

JSON序列化与代码生成。

目录

为什么使用它

你是否曾为json_serializable所困扰?所有生成的代码和’part’会使你的源代码变得混乱。使用Otter JSON,保持一切简单且整洁。

特性

  • 生成的代码和源代码分离
  • 轻松注册新的序列化器
  • 支持所有原生类型
  • 支持Flutter常见类
  • 支持列表
  • 支持嵌套对象

如何使用

依赖项

pubspec.yaml文件中添加以下依赖项:

dependencies:
  otter_json:

dev_dependencies:
  build_runner:
  otter_json_generator:

注解

在需要序列化的类上添加@JSON注解:

@JSON
class Person {
  String firstName;
  String lastName;
}

生成

运行以下命令来生成序列化代码:

flutter pub run build_runner build

注册

在应用启动时注册生成的序列化模块:

Otter.module(GeneratedJsonModule());

toJson, fromJson

使用Otter.toJsonOtter.fromJson方法进行序列化和反序列化:

Map<String, dynamic> map = Otter.toJson(Person());
Person person = Otter.fromJson({});

自定义序列化器

如果你需要自定义序列化逻辑,可以创建一个实现JsonSerializer接口的类:

class ColorSerializer implements JsonSerializer<Color, int> {
  [@override](/user/override)
  Color decode(int output) {
    return Color(output);
  }

  [@override](/user/override)
  int encode(Color input) {
    return input.value;
  }
}

Otter.serializer(ColorSerializer());

链接

作者


示例代码

library example;

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:otter_json/otter_json.dart';

[@ImportJsonModule](/user/ImportJsonModule)([DefaultJsonModule, ExampleJsonModule])
class ExampleImportJsonModule {}

[@JsonModule](/user/JsonModule)([ExampleSerializer])
class ExampleJsonModule {}

class Example implements Json {
  [@JsonField](/user/JsonField)("name2")
  final String name;
  final int age;
  final double money;
  final List<int> list;
  final Map<String, int> map;
  final AnotherExample example2;
  final List<AnotherExample> example2s;
  final Color color;
  final int? nullInt;
  final ExampleEnum eenum;
  final Example2Enum? enum2;

  Example({
    required this.name,
    required this.age,
    required this.money,
    required this.list,
    required this.map,
    required this.example2,
    required this.example2s,
    required this.color,
    this.nullInt,
    required this.eenum,
    this.enum2,
  });
}

enum ExampleEnum {
  [@JsonField](/user/JsonField)("A1")
  a1,
  a2,
  b1,
  b2
}

enum Example2Enum {
  [@JsonField](/user/JsonField)(1)
  a1,
  [@JsonField](/user/JsonField)(2)
  a2,
  [@JsonField](/user/JsonField)(3)
  b1,
  [@JsonField](/user/JsonField)(4)
  b2
}

class AnotherExample implements Json {
  final String name;

  AnotherExample({required this.name});
}

class ExampleSerializer implements JsonSerializer<Color, int> {
  [@override](/user/override)
  Color decode(int output) {
    return Color(output);
  }

  [@override](/user/override)
  int encode(Color input) {
    return input.value;
  }
}

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

1 回复

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


otter_json_generator 是一个用于 Flutter 的代码生成插件,它可以帮助开发者自动生成 JSON 序列化和反序列化的代码。通过使用这个插件,你可以避免手动编写繁琐的 fromJsontoJson 方法,从而提升开发效率。

以下是使用 otter_json_generator 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 otter_jsonotter_json_generator 依赖。

dependencies:
  flutter:
    sdk: flutter
  otter_json: ^1.0.0

dev_dependencies:
  build_runner: ^2.0.0
  otter_json_generator: ^1.0.0

2. 创建数据模型类

接下来,创建一个数据模型类,并使用 @OtterJson() 注解标记它。

import 'package:otter_json/otter_json.dart';

part 'user.g.dart';

@OtterJson()
class User {
  final String name;
  final int age;
  final bool isActive;

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

3. 生成代码

运行以下命令来生成 JSON 序列化和反序列化的代码:

flutter pub run build_runner build

执行完命令后,otter_json_generator 会自动生成一个名为 user.g.dart 的文件,其中包含 User 类的 fromJsontoJson 方法。

4. 使用生成的代码

现在你可以使用生成的 fromJsontoJson 方法来序列化和反序列化 User 对象。

import 'user.dart';

void main() {
  // JSON 字符串
  final jsonString = '{"name": "John", "age": 30, "isActive": true}';

  // 反序列化
  final user = User.fromJson(jsonString);
  print(user.name); // 输出: John

  // 序列化
  final json = user.toJson();
  print(json); // 输出: {"name": "John", "age": 30, "isActive": true}
}

5. 自定义序列化行为(可选)

如果你需要自定义某些字段的序列化行为,可以使用 @OtterJsonKey() 注解来指定自定义的序列化逻辑。

@OtterJson()
class User {
  @OtterJsonKey(fromJson: _fromJson, toJson: _toJson)
  final DateTime createdAt;

  User({
    required this.createdAt,
  });

  static DateTime _fromJson(int timestamp) => DateTime.fromMillisecondsSinceEpoch(timestamp);
  static int _toJson(DateTime date) => date.millisecondsSinceEpoch;
}

6. 清理生成的代码(可选)

如果你需要清理生成的代码,可以运行以下命令:

flutter pub run build_runner clean
回到顶部