Flutter JSON 解析懒人攻略

栏目: 后端 · 前端 · 发布时间: 5年前

内容简介:VSCode 下建立 flutter.code-snipptes添加以下代码段比如服务端叫 user_id,本地想叫 userId.
dependencies:
  json_annotation: ^2.0.0

dev_dependencies:
  build_runner: ^1.0.0
  json_serializable: ^2.0.0
复制代码

2. 添加引用

import 'package:json_annotation/json_annotation.dart';
part 'your_model_file_name.g.dart';
复制代码

3. [可选] 使用 Code Snippets

VSCode 下建立 flutter.code-snipptes

Flutter JSON 解析懒人攻略

添加以下代码段

"Json Model": {
    "scope": "dart",
	"prefix": "fJsonModel",
	"body": [
		"@JsonSerializable()",
		"class ${1:type} {",
		"${1:type} ();",
		"factory ${1:type} .fromJson(Map<String, dynamic> json) => _$${1:type} FromJson(json);",
		"Map<String, dynamic> toJson() => _$${1:type} ToJson(this);",
		"}"
	],
	"description": "Json Model"
},
复制代码

4. (通过Code Snippets) 建立以下模型

@JsonSerializable() // 关键要素 1
class MyUserModel { // 关键要素 2
  int user_id;  // 要解析的字段,和 server 字段同名同类型
  String user_name;
  String user_avatar;

  MyUserModel({this.user_id, this.user_name, this.user_avatar});

//反序列化 关键要素 3
  factory MyUserModel.fromJson(Map<String, dynamic> json) => _$MyUserModelFromJson(json); 

//序列化 关键要素 4
  Map<String, dynamic> toJson() => _$MyUserModelToJson(this);
}
复制代码

5. 服务端和本地字段不同名的处理

比如服务端叫 user_id,本地想叫 userId.

Code Snippets:

"Json key": {
	"scope": "dart",
	"prefix": "fJsonKey",
	"body": [
		"@JsonKey(name: '${1:serverKey}')",
		"final ${2:type} ${3:localKey};"
	],
	"description": "Json key"
}
复制代码
@JsonKey(name: 'user_id') // 服务端
final int userId; // 本地
复制代码

6. 有些字段不想被解析

@JsonKey(ignore: true)
final int myVar;
复制代码

7. 开启脚本转换刚才的源代码

打开终端,cd 到工程根目录

输入以下命令:

  1. 一次性转换
flutter pub run build_runner build
复制代码
  1. 循环监控转换
flutter pub run build_runner watch 
复制代码

注意:循环监控可能造成模拟器 hot reload 失效,建议建模完毕后关闭。

执行完之后,会自动出现 YourModel.g.dart 类,里面就是完整的 json 解析模板代码。这个类不要修改,它是由脚本自动生成。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

We Are the Nerds

We Are the Nerds

Christine Lagorio-Chafkin / Hachette Books / 2018-10-2 / USD 18.30

Reddit hails itself as "the front page of the Internet." It's the third most-visited website in the United States--and yet, millions of Americans have no idea what it is. We Are the Nerds is an eng......一起来看看 《We Are the Nerds》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换