Flutter数据解析--json_serializable

json_serializable是dart官方推荐和提供的JSON转Model的方式:

  • 一个自动化源代码生成器来为你生成 JSON 序列化数据模板;

  • 由于序列化数据代码不再需要手动编写或者维护,你可以将序列化 JSON 数据在运行时的异常风险降到最低;

第一步:添加相关的依赖 

依赖分为项目依赖(dependencies),开发依赖(dev_dependencies):

  • 注意:需要执行flutter pub get确保我们的项目中有这些依赖

dependencies:
  json_annotation: ^3.0.1

dev_dependencies:
  json_serializable: ^3.2.5
  build_runner: ^1.8.0

 第二步:以json_serializable 的方式创建模型类

//以一个简单的Json数据作为例子
final jsonInfo = {
    "nickname": "coderwhy",
    "level": 18,
    "courses": ["语文", "数学", "英语"],
    "register_date": "2222-2-22",
    "computer": {
      "brand": "MackBook",
      "price": 1000
    }
  };

 创建对应的模型(以json_serializable 的方式,创建完成后代码是报错的

  1. part 'user.g.dart'==>这个是之后json_serializable会自动帮助我们生成的文件
  2. JsonSerializable()==>注解:告诉json_serializable哪一个类需要进行转换
  3. JsonKey==>当映射关系不一样时,可以指定映射关系
  4. 另外,这里必须有我们的构造方法
  5. 需要有对应的工厂构造器==>UserToJson(this)调用的该方法目前会报错,需要json_serializable来生成
  6. toString方法不是必须的,是待会儿进行测试的 

User类的代码: 

import 'package:json_annotation/json_annotation.dart';
import 'model/computer.dart';

part 'user.g.dart';

@JsonSerializable()
class User {
  String name;
  String email;
  @JsonKey(name: "register_date")
  String registerDate;
  List<String> courses;
  Computer computer;

  User(this.name, this.email, this.registerDate, this.courses, this.computer);

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

  @override
  String toString() {
    return 'User{name: $name, email: $email, registerDate: $registerDate, courses: $courses, computer: $computer}';
  }

}

Computer类的代码:

import 'package:json_annotation/json_annotation.dart';

part 'computer.g.dart';

@JsonSerializable()
class Computer {
  String brand;
  double price;

  Computer(this.brand, this.price);

  factory Computer.fromJson(Map<String, dynamic> json) => _$ComputerFromJson(json);
  Map<String, dynamic> toJson() => _$ComputerToJson(this);

  @override
  String toString() {
    return 'Computer{brand: $brand, price: $price}';
  }
}

第三步:生成JSON序列化代码

在项目终端运行下面的指令:

  • 该指令是生成一次JSON序列化的代码

  • flutter pub run build_runner build

或运行下面的指令:

  • 会监听文件的改变,重新生成JSON序列化的代码

  • flutter pub run build_runner watch

 第四步:测试代码

final jsonInfo = {
  "nickname": "coderwhy",
  "level": 18,
  "courses": ["语文", "数学", "英语"],
  "register_date": "2222-2-22",
  "computer": {
    "brand": "MackBook",
    "price": 1000
  }
};

final user = User.fromJson(jsonInfo);
print(user);

 在线数据解析

网址:

1.网址1

2. 网址2

网址1在数据复杂的情况下,转化可能会出现异常,建议使用网址2 

猜你喜欢

转载自blog.csdn.net/eastWind1101/article/details/129693019