【Flutter】Flutter 使用 json_serializable 进行 JSON 序列化

news2024/11/26 0:19:38

文章目录

    • 一、前言
    • 二、 json_serializable 简介
    • 三、如何在 Flutter 中安装和配置 json_serializable
    • 四、json_serializable 的基本使用
    • 五、一个实际的 Flutter 应用示例
    • 六、版本信息
    • 七、总结

一、前言

嗯啊,你好呀!欢迎来到我的博客。

今天我们要聊聊的是如何在 Flutter 中使用 json_serializable 进行 JSON 序列化。

这是小雨青年于 2023 年发布在 CSDN 的博客,如果你不是在 CSDN 看到的,请联系我。

对啦,这个话题可能对于刚接触 Flutter 的你来说有点难度,但是别担心,我会尽可能用简单易懂的语言来解释,让你能够轻松掌握这个技能。

🎉想要精通 Flutter,掌握更多技巧和最佳实践?好消息来了!👉 Flutter专栏->Flutter Developer 101 入门小册 正在等你!📚

🔍这里有你需要的所有 Flutter 学习资源,包括代码示例和深度解析。🎯

⏰专栏内容持续更新,价格也会随之上涨。现在加入,享受最优惠的价格!💰

🚀现在,让我们开始今天的 Flutter 之旅吧!🌍

二、 json_serializable 简介

json_serializable 是一个 Dart 包,它可以自动为你生成 JSON 序列化和反序列化的代码。这个包的主要优点是它可以大大简化 JSON 序列化的过程,让你可以更专注于业务逻辑的开发。

那么,为什么我们需要进行 JSON 序列化呢?在开发过程中,我们经常需要从服务器获取数据,或者将数据发送到服务器。这些数据通常是以 JSON 格式进行传输的。因此,我们需要一种方法来将 Dart 对象转换为 JSON 格式,以便可以将它们发送到服务器,同时也需要一种方法来将 JSON 数据转换为 Dart 对象,以便我们可以在应用中使用这些数据。这就是我们需要 json_serializable 的原因。

好了,现在你应该对 Flutter 和 json_serializable 有了一定的了解。接下来,我们将进入实战部分,让我们看看如何在 Flutter 中安装和配置 json_serializable,以及如何使用它进行 JSON 序列化。

三、如何在 Flutter 中安装和配置 json_serializable

要在 Flutter 中使用 json_serializable,我们首先需要在项目中安装它。这个过程非常简单,只需要在你的 pubspec.yaml 文件中添加以下代码:

dependencies:
  flutter:
    sdk: flutter
  json_annotation: ^4.0.0

dev_dependencies:
  build_runner: ^2.0.0
  json_serializable: ^6.0.0

然后,你可以在终端中运行 flutter pub get 命令来获取这些依赖包。

安装完 json_serializable 后,我们需要进行一些简单的配置。首先,我们需要在我们想要进行 JSON 序列化的 Dart 类上添加 @JsonSerializable() 注解。然后,我们需要在这个类中添加两个方法:fromJsontoJsonfromJson 方法用于将 JSON 数据转换为 Dart 对象,而 toJson 方法则用于将 Dart 对象转换为 JSON 数据。

四、json_serializable 的基本使用

在这一部分,我们将创建一个简单的模型类,并使用 json_serializable 进行 JSON 序列化。

首先,我们创建一个名为 Person 的模型类,这个类有两个属性:firstNamelastName。然后,我们在这个类上添加 @JsonSerializable() 注解,并添加 fromJsontoJson 方法。

import 'package:json_annotation/json_annotation.dart';

part 'person.g.dart';

()
class Person {
  final String firstName;
  final String lastName;

  Person({required this.firstName, required this.lastName});

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

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

在这个代码中,_$PersonFromJson_$PersonToJson 是由 json_serializable 自动生成的方法,我们只需要调用它们就可以进行 JSON 序列化和反序列化。

然后,我们可以创建一个 Person 对象,并使用 toJson 方法将它转换为 JSON 数据:

void main() {
  var person = Person(firstName: 'John', lastName: 'Doe');
  print(person.toJson());
}

这段代码会输出:{firstName: John, lastName: Doe}

同样,我们也可以使用 fromJson 方法将 JSON 数据转换为 Person 对象:

void main() {
  var jsonData = {'firstName': 'John', 'lastName': 'Doe'};
  var person = Person.fromJson(jsonData);
  print(person.firstName);  // 输出:John
  print(person.lastName);   // 输出:Doe
}

这就是 json_serializable 的基本使用方法。通过使用 json_serializable,我们可以非常方便地进行 JSON 序列化和反序列化,大大提高了我们的开发效率。

五、一个实际的 Flutter 应用示例

现在,我们来看一个实际的 Flutter 应用示例。在这个示例中,我们将创建一个用户列表,并使用 json_serializable 进行 JSON 序列化和反序列化。

首先,我们创建一个 User 类,这个类有三个属性:idnameemail。然后,我们在这个类上添加 @JsonSerializable() 注解,并添加 fromJsontoJson 方法。

import 'package:json_annotation/json_annotation.dart';

part 'user.g.dart';

()
class User {
  final int id;
  final String name;
  final String email;

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

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

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

然后,我们创建一个 UserList 类,这个类有一个 users 属性,它是一个 User 对象的列表。我们同样在这个类上添加 @JsonSerializable() 注解,并添加 fromJsontoJson 方法。

import 'package:json_annotation/json_annotation.dart';

part 'user_list.g.dart';

()
class UserList {
  final List<User> users;

  UserList({required this.users});

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

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

现在,我们可以创建一个 UserList 对象,并使用 toJson 方法将它转换为 JSON 数据:

void main() {
  var userList = UserList(users: [
    User(id: 1, name: 'John Doe', email: 'john.doe@example.com'),
    User(id: 2, name: 'Jane Doe', email: 'jane.doe@example.com'),
  ]);
  print(userList.toJson());
}

这段代码会输出:{users: [{id: 1, name: John Doe, email: john.doe@example.com}, {id: 2, name: Jane Doe, email: jane.doe@example.com}]}

同样,我们也可以使用 fromJson 方法将 JSON 数据转换为 UserList 对象:

void main() {
  var jsonData = {
    'users': [
      {'id': 1, 'name': 'John Doe', 'email': 'john.doe@example.com'},
      {'id': 2, 'name': 'Jane Doe', 'email': 'jane.doe@example.com'},
    ]
  };
  var userList = UserList.fromJson(jsonData);
  for (var user in userList.users) {
    print('${user.id}: ${user.name} (${user.email})');
  }
}

这段代码会输出:

1: John Doe (john.doe@example.com)
2: Jane Doe (jane.doe@example.com)

六、版本信息

在我们的示例中,我们使用的 Flutter 版本是 3.10.0,Dart SDK的版本是 3.0.0。

这些版本信息是在编写这篇文章时的最新版本,如果你使用的版本不同,可能需要进行一些调整。

七、总结

我们已经学习了如何在 Flutter 中使用 json_serializable 进行 JSON 序列化。

我们首先了解了 Flutter 和 json_serializable 的基本概念,然后我们学习了如何在 Flutter 中安装和配置 json_serializable,以及如何使用 json_serializable 进行基本的 JSON 序列化。最后,我们通过一个实际的 Flutter 应用示例,看到了 json_serializable 在实际应用中的强大功能。

通过学习这篇文章,我希望你能够理解 JSON 序列化的重要性,以及 json_serializable 如何帮助我们简化 JSON 序列化的过程。记住,学习新的技能总是需要时间和实践的,所以不要急于求成,慢慢来,你一定可以掌握这个技能的。

这是小雨青年于 2023 年发布在 CSDN 的博客,如果你不是在 CSDN 看到的,请联系我。如果你有任何问题或者建议,欢迎在评论区留言,我会尽我所能来帮助你。那么,我们下次再见,祝你学习愉快,再见!

🚀对 Flutter 好奇?想深入探索?👉 Flutter专栏->Flutter Developer 101 入门小册 是你的最佳伙伴!📚

👀你将在这里找到全面的 Flutter 学习资源,包括代码示例和深度解析。🔍

💡想知道如何用 Flutter 构建应用?答案就在我们的专栏!🎯

⏰别等了,专栏内容持续更新,价格也会随之上涨。现在加入,享受最优惠的价格!💰

🌍一起在 Flutter 的世界中探索吧!想了解更多?点击这里:Flutter Developer 101 入门小册 专栏指引 🚩

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/703522.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于安卓的初中英语语法APP设计与实现(源码+文档+PPT)

智能手机的普及使移动学习成为一种全新的学习方式,越来越受到研究者与学习者的关注。调查显示,移动学习对英语学习特别是应用英语的学习有良好的效果。基于Android设计开发的英语语法APP包含“练习题册”、“语法分析”、“搜索语法”三大功能模块,能够帮助学生利用碎片时间学习…

HBase(11):shell管理操作

1 status 例如:显示服务器状态 2 whoami 显示HBase当前用户,例如: 3 list 显示当前所有的表 4 count 统计指定表的记录数,例如: 5 describe 展示表结构信息 6 exists 检查表是否存在,适用于表量特别多的情况

nginxWebUI 远程命令执行漏洞

漏洞介绍 nginxWebUI是一款图形化管理nginx配置的工具&#xff0c;能通过网页快速配置nginx的各种功能&#xff0c;包括HTTP和TCP协议转发、反向代理、负载均衡、静态HTML服务器以及SSL证书的自动申请、续签和配置&#xff0c;配置完成后可以一键生成nginx.conf文件&#xff0c…

Adobe中修改注释签名

控制面板-> 系统和安全-> 管理工具-> 计算机管理-> 打开“计算机管理”对话框-> 在左边栏的系统工具下选择本地用户和组-> 点击“用户”->选择要改的用户名->右键重命名 打开Adobe Acrobat->点击"编辑"->首选项->注释 ->把 “登…

vue实现复制文本格式化

vue全局方法 实现复制文本格式化,方法简单实用易懂,100%成功 先上效果图 实现步骤 第一步 ,在main.js 插入以下代码 Vue.prototype.copys = function copys(text) {var isRTL = document.documentElement.getAttribute(dir) === rtl;var element = document.createElemen…

【半监督图像分割 2022 CVPR】UCC

文章目录 【半监督图像分割 2022 CVPR】UCC摘要1. 简介2. 相关工作2.1 半监督分类2.2 半监督语义分割。 3. 交叉头协同训练的半监督学习3.1 整体预览3.2 弱增强和强增强3.3 动态交叉集复制粘贴策略3.4 不确定度估计 4. 实验4.1 实验设置4.2 对比sota4.3 消融实验 5. 总结 【半监…

《移动互联网技术》第六章 资源管理: 掌握定制控件样式、界面主题、可绘制资源程序的编写方法

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

Linux下的分布式迁移工具dsync使用

一、Linux下的分布式迁移工具dsync使用 dsync 是一个在 Linux 系统上用于迁移文件和目录的工具。它可以在不同的存储设备之间进行数据同步和迁移操作。dsync 是 rsync 工具的一个衍生版本&#xff0c;专注于在本地文件系统之间进行数据迁移。 这里是官网&#xff1a;dsync 1、…

【强化学习】常用算法之一 “DQN”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

5、多层感知机:过拟合解决方法:权重衰退、丢弃法

1、权重衰退 1. 基础概念 实际上&#xff0c;限制特征的数量是缓解过拟合的一种常用技术。然而&#xff0c;简单地丢弃特征对这项工作来说可能过于生硬。我们继续思考多项式回归的例子&#xff0c;考虑高维输入可能发生的情况。多项式对多变量数据的自然扩展称为单项式&#…

微信小程序学习记录3 案例分享<蓝牙小车UI>

效果 页面1 一键连接蓝牙 页面2 控制页面 思路 页面1 旋转动画一键连接蓝牙(写死了device id和uuid) 页面2 轮播图按键 按键绑定不同事件即可

多模态大语言模型综述来啦!一文带你理清多模态关键技术

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 随着 ChatGPT 在各领域展现出非凡能力&#xff0c;多模态大型语言模型&#xff08;MLLM&#xff09;近来也成为了研究的热点&#xff0c;它利用强大的大型语言模型&#xff08;LLM&#xff09;作为“大脑”&#xff0c;可以执…

Linux卸载OpenJDK

1、JDK版本 java -version2、查看当前系统OPENJDK rpm -qa | grep jdk3、卸载 sudo rpm -e --nodeps java-1.8.0-openjdk sudo rpm -e --nodeps java-1.8.0-openjdk-headless sudo rpm -e --nodeps java-1.8.0-openjdk-devel sudo rpm -e --nodeps copy-jdk-configs4、其他 …

爬虫入门指南(3):Python网络请求及常见反爬虫策略应对方法

文章目录 引言HTTP协议与请求方法HTTP协议请求方法 使用Python进行网络请求安装Requests库发送GET请求发送POST请求 反爬虫与应对策略IP限制使用代理IP&#xff1a; 用户代理检测设置User-Agent头部&#xff1a; 验证码参考方案 动态页面请求频率限制未完待续.... 引言 在当今…

Python 基本数据类型(五)

文章目录 每日一句正能量List&#xff08;列表&#xff09;结语 每日一句正能量 营造良好的工作和学习氛围&#xff0c;时刻牢记宗旨&#xff0c;坚定信念&#xff0c;胸怀全局&#xff0c;埋头苦干&#xff0c;对同事尊重信任谅解&#xff0c;发扬团体协作精神&#xff0c;积极…

安装tomcat的步骤与部署服务详解

目录 一安装tomcat步骤 1.首先关闭防火墙跟安全机制 2.安装jdk把jdk包与tomcat的包下载到/opt目录 3.然后用命令查看安装好的版本号 4.安装好jdk后需要把他设置到环境变量中去以免系统找不到 5.下来装tomcat 6.首先把你的tomcat安装包解压 然后包名太长简写成tomcat 7.进…

【单片机】STM32单片机频率计程序,外部脉冲计数程序,基于脉冲计数的频率计程序,STM32F103

文章目录 定时器外部脉冲计数功能程序实现TIM1 定时一秒钟中断TIM2 外部脉冲计数配置TIM3 PWM产生总程序 定时器外部脉冲计数功能 两种方法用于在单片机中实现频率计的功能。 第一种方法是通过定时器来衡量信号的周期&#xff0c;然后将周期转换为频率。在这种方法中&#xf…

异步秒杀逻辑前后端

前端 Sckill.vue <template><div><h2>go语言从入门到放弃</h2><el-button type"danger" click"handleSckill">秒杀</el-button></div> </template><script> export default {name: "Sckill&q…

华为认证 | HCIP-Datacom考试费多少?

华为认证之前版本的是RS体系的&#xff0c;也是我们所称的路由交换宣布结束。 Datacom代替了RS&#xff0c;考试内容和形式也发生了变化&#xff0c;今天就让我们来详细了解一下。 01 HCIP-Datacom考什么 HCIP-Datacom系列认证包含1门核心认证Core Technology和6门子认证。 …

MySQL数据库的优化技术二

纵论 对mysql优化时一个综合性的技术&#xff0c;主要包括 表的设计合理化(符合3NF)添加适当索引(index) [ 四种: 普通索引、主键索引、唯一索引unique、全文索引 ]分表技术( 水平分割、垂直分割 ) 水平分割根据一个标准重复定义几个字段值相同&#xff0c;表名称不同的表&…