Gson简要使用笔记

深入理解Gson:Google的Java JSON库解析指南 JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,因其结构简单、易于阅读和编写以及跨平台特性而被广泛应用于网络数据交换。相较于其他数据交换格式,如XML,JSON格式在前后端数据交互中因其简洁性和灵活性而备受欢迎。在使用Gson处理JSON数据时,我们经常遇到一些特殊情况,如日期类型、枚举类型等不能直接序列化与反序列化的类型。这时,我们可以通过自定义类型适配器来解决这些问题。类型适配器可以让我们在序列化和反序列化过程中自定义行为,以适应特定的数据处理需求。 阅读详情

最近在做一个java web service项目,需要用到jason,本人对java不是特别精通,于是开始搜索一些java平台的json类库。

发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson。

经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。

下面是一个简单的例子:

Person实体
复制代码
   
public class Person {

private String name;
private int age;

/**
*
@return the name
*/
public String getName() {
return name;
}

/**
*
@param name the name to set
*/
public void setName(String name) {
this .name = name;
}

/**
*
@return the age
*/
public int getAge() {
return age;
}

/**
*
@param age the age to set
*/
public void setAge( int age) {
this .age = age;
}

@Override
public String toString()
{
return name + " : " + age;
}
}
复制代码

实体很简单,两个字段,当然实体中的字段也可以是List或者Set类型的。

生成Json字符串
复制代码
   
Gson gson = new Gson();
List
< Person > persons = new ArrayList < Person > ();
for ( int i = 0 ; i < 10 ; i ++ ) {
Person p
= new Person();
p.setName(
" name " + i);
p.setAge(i
* 5 );
persons.add(p);
}
String str
= gson.toJson(persons);
复制代码

上面的代码重点是Gson对象,它提供了toJason()方法将对象转换成Json字符串,上面代码的str对象值为:

[{"name":"name0","age":0},{"name":"name1","age":5},{"name":"name2","age":10},{"name":"name3","age":15},{"name":"name4","age":20},{"name":"name5","age":25},{"name":"name6","age":30},{"name":"name7","age":35},{"name":"name8","age":40},{"name":"name9","age":45}]

很标准的json数据,很简单吧,呵呵。

下面来看看gson的反序列化,Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法。

在日常应用中,我们一般都会碰到两种情况,转成单一实体对象和转换成对象列表或者其他结构。

先来看第一种:

比如json字符串为:[{"name":"name0","age":0}]

代码:

  
Person person = gson.fromJson(str, Person. class );

提供两个参数,分别是json字符串以及需要转换对象的类型。

第二种,转换成列表类型:

代码:

  
List < Person > ps = gson.fromJson(str, new TypeToken < List < Person >> (){}.getType());
for ( int i = 0 ; i < ps.size() ; i ++ )
{
Person p
= ps.get(i);
System.out.println(p.toString());
}

可以看到上面的代码使用了TypeToken,它是gson提供的数据类型转换器,可以支持各种数据集合类型转换。

Gson的基本使用就是这么多,至于annotation方面可以参考gson的官方文档,希望能对初学java和gson的同学有所帮助。

Google开源JSON解析库Gson-2.2.4完整组件详解 当默认行为满足不了需求时,就轮到自定义序列化登场了。经过这一番深入探索,你会发现Gson远不止是一个“toJSON/fromJSON”的工具包。它的设计理念融合了简洁性、灵活性与高性能三大目标:简洁:默认行为开箱即用灵活:注解+自定义适配器满足各种复杂需求高效:流式处理+TypeAdapter支撑大规模数据场景下次当你写下的时候,不妨想想背后这套精妙的机制——也许你会写出更优雅、更高效的代码。毕竟,真正的高手,不只是会用工具,而是懂得工具的灵魂。✨。 阅读详情

相关推荐

Gson库:Java与JSON数据转换的利器

在现代的IT领域中,数据的交换与处理变得越来越重要。随着网络应用的普及,数据交换格式的标准化和通用性成了重要的研究方向。Gson,一个由Google提供的开源库,成为了处理JSON数据的强大工具。Gson(Google JSON Serializer)是一个用于Java语言的库,能够将Java对象转换成其JSON表示。它也能够将JSON字符串转换回等效的Java对象。Gson不仅支持基本数据类型的序列化,还支持更复杂的对象,如集合、泛型、枚举等。

weixin_35752233的博客 839

google gson toJson fromJson

经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。 下面是一个简单的例子: Person实体 public class Person { private String name; private int age;

陈谏辉 1万+

小白快速上手 labelme:新手图像标注详解教程

本教程旨在帮助初次接触 labelme 的用户快速上手该软件,掌握基本操作与标注流程,为语义分割数据集做准备。

小白一枚~ 2万+

你真的会用Gson吗?Gson使用指南集锦

原文链接:http://www.jianshu.com/p/e740196225a4 JSON (官网) 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便。其重要性不言而喻。解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等。 该系列其它文章 你真的会用Gson吗?Gson使用指南(一) 你真的会用Gson吗?Gson使用指南(二) 你真的会用Gson吗?Gson使用指南(三) 你真的会用Gs

QY'UniverseSpace的博客 713

手把手教你搞定MT6701磁编码器的SSI通信与CRC-6校验(附避坑代码)

本文详细介绍了MT6701磁编码器的SSI通信与CRC-6校验的实现方法,包括硬件连接、时序配置、数据读取和专用CRC-6算法。通过提供避坑代码和常见问题解决方案,帮助开发者快速掌握磁编芯片的调试技巧,确保通信稳定可靠。

weixin_30872337的博客 218

《跨界杂谈》华为印象(五):高度集权的矩阵式架构

高度集权的矩阵式架构 “高度集权的矩阵式架构”不是官方术语。是笔者的一位同事非常经典的总结。解释这个句话还是有点困难的,笔者入职华为三年也没彻底搞明白,在这里只能尝试性的解释一下。 矩阵 我们先看一下“矩阵”。华为有两套部门职能体系,华为内部术语,叫实线部门和虚线部门。由实线与虚线部门交叉构成矩阵。大部分(但不是所有)华为员工都由两个部门(两个领导)进行管理。对员工而言,所谓的实线部

《云计算架构技术与实践》 2994

Gson学习笔记

待写待写

javaSamBlog 135

MIMIC数据库基本信息分析

一、MIMIC数据库中26张表介绍 数据库中一共有26张表,记录患者入院的各种信息,每张表的介绍如下所示。 表格名 信息 admission 患者基本信息,比如性别、种族、语言、宗教、婚姻、入院和出院时间、死亡时间等 callout 提供病人准备从ICU转出或者已经从ICU转出时相关信息 caregivers 记录医护人员信息(ID、类型、附加...

m0_37520426的博客 1万+

【Gson】Gson 使用笔记

json 转 Object , json 转 Map

千山牧雪的专栏 736

Vue3 + 高德地图实现车辆电子围栏监控与报警

通过本文的实现,我们完成了一个通用的车辆电子围栏监控功能:支持多种围栏类型。支持进入/离开/双向报警。使用缓存机制避免重复告警。可与Vue3 + 高德地图无缝集成。在实际项目中,可以结合WebSocket 实时定位,实现车辆的实时监控 + 围栏告警系统🚀。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 1033

YOLOv8改进策略【注意力机制篇】| CVPRW-2024 分层互补注意力混合层 H-RAMi 针对低质量图像的特征提取模块

许多证据表明层次化网络对图像恢复(IR)任务通常不太有效,因为IR的目标是逐个预测像素值(密集预测),而缩小特征图会丢失重要的像素级信息。然而,层次化结构有降低时间复杂度以及学习语义级和像素级特征表示的优点。为了弥补缺点并利用优点,设计了H - RAMi层。

Limiiiing的博客 378

Gson使用简要笔记

只有在代码中才能认识到自己的短板,今天就简简单单的学习了GSON,简单记录一下,以后备用! Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java 类库。可以将一个 JSON 字符串转成一个 Java 对象,或者反过来。 下面是一个简单的例子: Person实体 public class Person {     private Str

April0417的博客 540

Open Dynamics Engine(ODE)物理引擎基础教程(I)——特点介绍

下一教程 Open Dynamics Engine(ODE)物理引擎基础教程(II)——相关概念 (在这一教程中将学习刚体、关节、碰撞的概念在ODE中的特点) 本文结构引言介绍特点使用ODE总结 引言 本文翻译自ODE官方教程英文版,有些地方增加了自己的理解。这一节介绍ODE的相关概念。 基础教程英文原版链接【http://ode.org/wiki/index.php?title=Manua...

腿足机器人领域 1676
上一篇: 详解iBaits中SqlMapClientTemplate的使用
下一篇: property和constructor-arg的使用
我是一只懒虫
博客等级 码龄17年 147粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值