Flutter JSON数据转换插件json_converters_lite的使用

Flutter JSON数据转换插件json_converters_lite的使用

简介

json_converters_lite 是一个用于将常见的 Dart 数据类型转换为与 JSON 兼容格式的轻量级插件。它提供了一种统一的方式来处理 Dart 数据类型的序列化。

所有转换器都实现了 JsonConverter 接口,该接口包含两个方法:

  • toJson:用于序列化值。
  • fromJson:用于反序列化值。

每个转换器在这个包中都有可空版本和不可空版本。传递给非空转换器的值也应该是非空的。可空转换器的名称以 optional 开头,并且可能返回空值。

完整的示例可以在 Example 标签下查看。


安装

这是一个独立的辅助包,不依赖任何其他库。

在您的 pubspec.yaml 文件中添加以下内容:

dependencies:
  json_converters_lite:

然后运行 flutter pub get 来安装依赖。


使用

导入包

在您的代码中导入 json_converters_lite 包:

import 'package:json_converters_lite/json_converters_lite.dart';

使用现有的转换器

1. BoolConverter

bool 转换为 int

final boolValue = true;
final int convertedValue = boolConverter.toJson(boolValue); // 1
final bool deserializedValue = boolConverter.fromJson(convertedValue); // true

2. DateTimeConverter

DateTime 转换为 ISO8601 格式的字符串。

final DateTime now = DateTime.now();
final String serializedDateTime = dateTimeConverter.toJson(now); 
// 输出类似 "2023-10-05T14:30:00.000"
final DateTime deserializedDateTime = dateTimeConverter.fromJson(serializedDateTime);
print(now == deserializedDateTime); // true

3. DurationConverter

Duration 中获取总秒数。

const Duration duration = Duration(seconds: 10);
final String serializedDuration = durationConverter.toJson(duration);
// 输出类似 "10"
final Duration deserializedDuration = durationConverter.fromJson(serializedDuration);
print(duration == deserializedDuration); // true

4. EnumConverter

将枚举值序列化为其名称的字符串形式。

enum Color { red, green, blue }

final Color color = Color.red;
final String serializedColor = enumConverter.toJson(color);
// 输出 "red"
final Color deserializedColor = enumConverter.fromJson(serializedColor);
print(color == deserializedColor); // true

5. IterableConverter

Iterable 中的每个元素应用指定的转换器。

final List<int> numbers = [1, 2, 3];
final List<String> serializedNumbers = iterableConverter.toJson(numbers, stringConverter);
// 输出 ["1", "2", "3"]
final List<int> deserializedNumbers = iterableConverter.fromJson(serializedNumbers, intConverter);
print(numbers == deserializedNumbers); // true

创建自定义转换器

您可以通过实现 JsonConverter 接口来创建自己的转换器。

class CustomConverter implements JsonConverter<String, double> {
  @override
  String toJson(double value) => value.toString();

  @override
  double fromJson(String value) => double.parse(value);
}

使用自定义转换器:

final CustomConverter customConverter = CustomConverter();
final String serialized = customConverter.toJson(3.14);
// 输出 "3.14"
final double deserialized = customConverter.fromJson(serialized);
print(3.14 == deserialized); // true

贡献

您可以贡献自定义的转换器并提议将其添加到此包中。同时,任何问题报告也非常欢迎。


常见问题

为什么创建这样一个基础功能的包?

因为这些功能在不同的项目中经常被使用,因此有一个一致的代码基础是非常有用的。


示例代码

以下是完整的示例代码:

// ignore_for_file: avoid_print

import 'package:json_converters_lite/json_converters_lite.dart';

void main() {
  final DateTime dateTime = DateTime.now();
  final String serializedDateTime = dateTimeConverter.toJson(dateTime);
  // 输出类似 "2023-10-05T14:30:00.000"
  final DateTime deserializedDateTime = dateTimeConverter.fromJson(serializedDateTime);
  print(dateTime == deserializedDateTime); // true

  const Duration duration = Duration(seconds: 10);
  final String serializedDuration = durationConverter.toJson(duration);
  // 输出类似 "10"
  final Duration deserializedDuration = durationConverter.fromJson(serializedDuration);
  print(duration == deserializedDuration); // true

  final bool boolValue = true;
  final int serializedBool = boolConverter.toJson(boolValue);
  // 输出 "1"
  final bool deserializedBool = boolConverter.fromJson(serializedBool);
  print(boolValue == deserializedBool); // true
}

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

1 回复

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


json_converters_lite 是一个用于在 Flutter 中简化 JSON 数据转换的插件。它可以帮助开发者轻松地将 JSON 数据转换为 Dart 对象,以及将 Dart 对象转换为 JSON 数据。这个插件特别适用于需要处理大量 JSON 数据的应用场景。

安装

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

dependencies:
  flutter:
    sdk: flutter
  json_converters_lite: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

基本用法

1. 创建模型类

假设你有一个如下的 JSON 数据:

{
  "id": 1,
  "name": "John Doe",
  "email": "john.doe@example.com"
}

你可以创建一个对应的 Dart 模型类:

import 'package:json_converters_lite/json_converters_lite.dart';

class User {
  int id;
  String name;
  String email;

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

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      email: json['email'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'email': email,
    };
  }
}

2. 使用 json_converters_lite 进行转换

你可以使用 json_converters_lite 提供的工具类来简化 JSON 转换过程。

从 JSON 字符串转换为 Dart 对象
import 'package:json_converters_lite/json_converters_lite.dart';

void main() {
  String jsonString = '{"id": 1, "name": "John Doe", "email": "john.doe@example.com"}';
  
  User user = JsonConvertersLite.fromJson<User>(jsonString, User.fromJson);
  
  print(user.name);  // 输出: John Doe
}
从 Dart 对象转换为 JSON 字符串
import 'package:json_converters_lite/json_converters_lite.dart';

void main() {
  User user = User(id: 1, name: "John Doe", email: "john.doe@example.com");
  
  String jsonString = JsonConvertersLite.toJson<User>(user, (user) => user.toJson());
  
  print(jsonString);  // 输出: {"id":1,"name":"John Doe","email":"john.doe@example.com"}
}

高级用法

json_converters_lite 还支持更复杂的 JSON 结构,例如嵌套对象、列表等。

嵌套对象

假设你有一个包含嵌套对象的 JSON 数据:

{
  "id": 1,
  "name": "John Doe",
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "zipcode": "12345"
  }
}

你可以创建对应的模型类:

class Address {
  String street;
  String city;
  String zipcode;

  Address({required this.street, required this.city, required this.zipcode});

  factory Address.fromJson(Map<String, dynamic> json) {
    return Address(
      street: json['street'],
      city: json['city'],
      zipcode: json['zipcode'],
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'street': street,
      'city': city,
      'zipcode': zipcode,
    };
  }
}

class User {
  int id;
  String name;
  Address address;

  User({required this.id, required this.name, required this.address});

  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      id: json['id'],
      name: json['name'],
      address: Address.fromJson(json['address']),
    );
  }

  Map<String, dynamic> toJson() {
    return {
      'id': id,
      'name': name,
      'address': address.toJson(),
    };
  }
}

然后你可以像之前一样进行 JSON 转换。

列表

如果你有一个包含列表的 JSON 数据:

{
  "users": [
    {"id": 1, "name": "John Doe"},
    {"id": 2, "name": "Jane Doe"}
  ]
}

你可以创建对应的模型类:

class UserList {
  List<User> users;

  UserList({required this.users});

  factory UserList.fromJson(Map<String, dynamic> json) {
    var usersJson = json['users'] as List;
    List<User> users = usersJson.map((userJson) => User.fromJson(userJson)).toList();
    
    return UserList(users: users);
  }

  Map<String, dynamic> toJson() {
    return {
      'users': users.map((user) => user.toJson()).toList(),
    };
  }
}

然后进行 JSON 转换:

void main() {
  String jsonString = '{"users": [{"id": 1, "name": "John Doe"}, {"id": 2, "name": "Jane Doe"}]}';
  
  UserList userList = JsonConvertersLite.fromJson<UserList>(jsonString, UserList.fromJson);
  
  print(userList.users[0].name);  // 输出: John Doe
}
回到顶部