Flutter如何实现json转对象

在Flutter开发中,如何将JSON数据转换成Dart对象?目前遇到的问题是手动解析JSON比较繁琐,有没有更高效的方法?比如使用json_serializable或built_value这类工具库时,具体应该如何配置和使用?希望能提供一个完整的示例,包括模型类的定义和转换代码的实现步骤。

2 回复

在Flutter中,使用json_serializable包实现JSON转对象。步骤如下:

  1. pubspec.yaml中添加依赖:json_annotationjson_serializable
  2. 创建模型类,使用@JsonSerializable()注解。
  3. 运行build_runner生成序列化代码:flutter pub run build_runner build
  4. 使用fromJsontoJson方法转换。

更多关于Flutter如何实现json转对象的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,实现 JSON 转对象主要有两种方式:手动解析和使用代码生成工具。以下是详细步骤:

1. 手动解析(适合简单对象)

  • 步骤

    1. 创建模型类,实现 fromJsontoJson 方法。
    2. 使用 dart:convert 库的 json.decode() 解析 JSON 字符串。
  • 示例代码

import 'dart:convert';

class User {
  final String name;
  final int age;

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

  // JSON -> 对象
  factory User.fromJson(Map<String, dynamic> json) {
    return User(
      name: json['name'],
      age: json['age'],
    );
  }

  // 对象 -> JSON
  Map<String, dynamic> toJson() => {
    'name': name,
    'age': age,
  };
}

// 使用示例
void main() {
  String jsonString = '{"name": "Alice", "age": 25}';
  Map<String, dynamic> userMap = json.decode(jsonString);
  User user = User.fromJson(userMap);
  print(user.name); // 输出: Alice
}

2. 使用代码生成工具(推荐用于复杂对象)

  • 工具json_serializable + build_runner
  • 步骤
    1. 添加依赖到 pubspec.yaml
    dependencies:
      json_annotation: ^4.8.1
    
    dev_dependencies:
      build_runner: ^2.4.6
      json_serializable: ^6.7.1
    
    1. 创建模型类并添加注解:
    import 'package:json_annotation/json_annotation.dart';
    part 'user.g.dart'; // 生成的文件
    
    [@JsonSerializable](/user/JsonSerializable)()
    class User {
      final String name;
      final int age;
    
      User({required this.name, required this.age});
    
      factory User.fromJson(Map<String, dynamic> json) => _$UserFromJson(json);
      Map<String, dynamic> toJson() => _$UserToJson(this);
    }
    
    1. 运行生成命令:
    flutter pub run build_runner build
    

注意事项

  • 确保 JSON 键与模型字段名一致,或用 @JsonKey(name: 'field_name') 注解映射。
  • 处理嵌套对象时,在嵌套类上也添加 [@JsonSerializable](/user/JsonSerializable)()

选择手动方式适用于简单场景,代码生成工具更适合大型项目,能减少错误并提高效率。

回到顶部