Flutter JSON序列化与反序列化插件serde_json的使用

Flutter JSON序列化与反序列化插件serde_json的使用

在Flutter开发中,处理JSON数据是非常常见的需求。serde_json插件可以帮助我们轻松地实现JSON的序列化和反序列化。本文将通过一个完整的示例来展示如何使用serde_json插件。

示例代码

import 'package:serde_json/serde_json.dart'; // 导入serde_json包
import 'package:test/test.dart'; // 导入测试相关的库

// 定义一个类,并使用[@Serde](/user/Serde)()注解
[@Serde](/user/Serde)()
class User {
  String name;
  int age;

  User(this.name, this.age);

  // 构造函数用于从Map对象创建User实例
  User.fromJson(Map<String, dynamic> json)
      : name = json['name'],
        age = json['age'];

  // 将User实例转换为Map对象
  Map<String, dynamic> toJson() => {
        'name': name,
        'age': age,
      };
}

void main() {
  // 创建一个User实例
  final user = User('张三', 30);

  // 将User实例转换为JSON字符串
  final jsonString = user.toJson().toString();
  print('JSON字符串: $jsonString');

  // 将JSON字符串解析为Map对象
  final parsedJson = jsonDecode(jsonString) as Map<String, dynamic>;
  print('解析后的Map: $parsedJson');

  // 将Map对象转换回User实例
  final newUser = User.fromJson(parsedJson);
  print('新的User实例: $newUser');
}

详细步骤

  1. 导入库

    import 'package:serde_json/serde_json.dart';
    import 'package:test/test.dart';
    
  2. 定义模型类 使用[@Serde](/user/Serde)()注解来标记类,以便支持序列化和反序列化。

    [@Serde](/user/Serde)()
    class User {
      String name;
      int age;
    
      User(this.name, this.age);
    
      // 构造函数用于从Map对象创建User实例
      User.fromJson(Map<String, dynamic> json)
          : name = json['name'],
            age = json['age'];
    
      // 将User实例转换为Map对象
      Map<String, dynamic> toJson() => {
            'name': name,
            'age': age,
          };
    }
    
  3. 创建实例并进行序列化

    final user = User('张三', 30);
    final jsonString = user.toJson().toString();
    print('JSON字符串: $jsonString');
    
  4. 反序列化JSON字符串

    final parsedJson = jsonDecode(jsonString) as Map<String, dynamic>;
    print('解析后的Map: $parsedJson');
    
  5. 将Map对象转换回User实例

    final newUser = User.fromJson(parsedJson);
    print('新的User实例: $newUser');
    

更多关于Flutter JSON序列化与反序列化插件serde_json的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


在 Flutter 中,JSON 序列化与反序列化是一个常见的任务。虽然 serde_json 是 Rust 中常用的 JSON 库,但在 Flutter/Dart 中,我们通常会使用 dart:convert 库或一些第三方库来处理 JSON 数据。以下是如何在 Flutter 中进行 JSON 序列化与反序列化的详细说明。

1. 使用 dart:convert

dart:convert 是 Dart 标准库中的一部分,提供了 JSON 编码和解码的功能。

序列化(将对象转换为 JSON 字符串)

import 'dart:convert';

void main() {
  Map<String, dynamic> user = {
    'name': 'John Doe',
    'email': 'john.doe@example.com',
    'age': 30,
  };

  String jsonString = jsonEncode(user);
  print(jsonString); // {"name":"John Doe","email":"john.doe@example.com","age":30}
}

反序列化(将 JSON 字符串转换为对象)

import 'dart:convert';

void main() {
  String jsonString = '{"name":"John Doe","email":"john.doe@example.com","age":30}';

  Map<String, dynamic> user = jsonDecode(jsonString);
  print(user['name']); // John Doe
}

2. 使用 json_serializable 插件

对于复杂的对象,手动编写序列化和反序列化代码可能会很繁琐。json_serializable 是一个代码生成库,可以自动生成这些代码。

安装依赖

pubspec.yaml 中添加以下依赖:

dependencies:
  json_annotation: ^4.8.0

dev_dependencies:
  build_runner: ^2.3.3
  json_serializable: ^6.7.1

创建模型类

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

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

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

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

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

生成代码

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

flutter pub run build_runner build

这会生成 user.g.dart 文件,其中包含 _$UserFromJson_$UserToJson 方法。

使用生成的代码

void main() {
  String jsonString = '{"name":"John Doe","email":"john.doe@example.com","age":30}';

  User user = User.fromJson(jsonDecode(jsonString));
  print(user.name); // John Doe

  String newJsonString = jsonEncode(user.toJson());
  print(newJsonString); // {"name":"John Doe","email":"john.doe@example.com","age":30}
}
回到顶部