gson的简单使用方法

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

下面是一个简单的例子:

publicclassPerson {

privateString name;
privateintage;

/**
* @returnthe name
*/
publicString getName() {
returnname;
}

/**
* @paramname the name to set
*/
publicvoidsetName(String name) {
this.name =name;
}

/**
* @returnthe age
*/
publicintgetAge() {
returnage;
}

/**
* @paramage the age to set
*/
publicvoidsetAge(intage) {
this.age =age;
}

@Override
publicString toString()
{
returnname +":"+age;
}
}

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

Gson gson =newGson();
List<Person>persons =newArrayList<Person>();
for(inti =0; i <10; i++) {
Person p =newPerson();
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, newTypeToken<List<Person>>(){}.getType());
for(inti =0; i <ps.size() ; i++)
{
Person p =ps.get(i);
System.out.println(p.toString());
}

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

转载于:https://www.cnblogs.com/happyPawpaw/archive/2012/10/23/2735697.html

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

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

相关文章

String.Format格式说明

C#格式化数值结果表字符说明示例输出C货币string.Format("{0:C3}", 2)&#xff04;2.000D十进制string.Format("{0:D3}", 2)002E科学计数法1.20E0011.20E001G常规string.Format("{0:G}", 2)2N用分号隔开的数字string.Format("{0:N}", …

linux bjobs

bjobs 查看正在进行的job bkill job id 杀死job 转载于:https://www.cnblogs.com/zk-szd1314/p/11322460.html

uboot的移植——DM9000移植的理论基础

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权请告知删除。 一、网卡相关的基本知识 1、DM9000网卡芯片和SoC的连接 如上图所示&#xff0c;DM9000网卡芯片是通过SROM总线接口&#xff0c;或者说SROM控制器接入SoC的。下面分别介绍SROM控制器、DM9000网卡芯片的相关…

mysql“Access denied for user 'root'@'localhost'”问题的解决

我的系统是Ubuntu12.04&#xff0c;最近新装好的mysql在进入mysql工具时&#xff0c;总是有错误提示:# mysql -uroot -pEnter password:ERROR 1045 (28000): Access denied for user rootlocalhost (using password: NO)使用网上介绍的方法修改root用户的密码&#xff1a;# mys…

ServiceStack.Redis之IRedisClient第三篇

事实上&#xff0c;IRedisClient里面的很多方法&#xff0c;其实就是Redis的命令名。只要对Redis的命令熟悉一点就能够非常快速地理解和掌握这些方法&#xff0c;趁着现在对Redis不是特别了解&#xff0c;我也对着命令来了解一下这些方法。 一、属性 IRedisClient的属性如下&am…

javascript深入浅出

第一章 数据类型 1&#xff0c;六种数据类型&#xff1a;原始类型&#xff08;number&#xff0c;string&#xff0c;boolean&#xff0c;null&#xff0c;undefined&#xff09; object对象&#xff08;Function Array Date&#xff09; 2&#xff0c;隐式转换&#xff1a;Na…

mv命令:移动、重命名文件或文件夹

linux使用mv命令来移动、重命名文件或文件夹。 例如&#xff0c;将一个名为abc.txt的文件重命名为1234.txt&#xff1a;mv abc.txt 1234.txt 例如&#xff0c;将目录A重命名为B&#xff1a;mv A B 例如&#xff0c;将a.txt移动到/b下&#xff0c;并重命名为c.txt&#xff1a…

MTK优美代码赏析6:电话本里的快速排序和插入排序算法

MTK优美代码赏析6:电话本里的快速排序和插入排序算法 记得读书的时候学数据结构和一些程序基础的课程,学了很多的排序算法,当时感觉蛮有趣,也很简单,当大学的教育是以理论为主的,哪些教授们又没给咱举个实用的例子说明为什么要教我们这个,所以考完试就把这些没用的东东给忘了..…

Visual C++中最常用的类与API函数

这篇文章能让初学者快速了解visual C MFC中常见的核心的类与函数&#xff0c;虽然全部看下来有点枯燥&#xff0c;但对初学者快速了解MFC的框架结构很有好处。 常用类 CArchive类&#xff1a;用于二进制保存档案 CBitmap类&#xff1a;封装Windows的图形设备接口(GDI)位图 CBru…

vim编译器的使用方法(行号、删除、复制、查找等)

以下内容源于网络资源的学习与整理&#xff0c;如有侵权请告知删除。 vim是在Linux环境下的编辑器&#xff0c;它的常见使用操作如下。 1、显示行号 编辑器默认不显示行号&#xff0c;有二种办法可以显示行号。 &#xff08;1&#xff09;第一种是&#xff0c;暂时显示。在vim…

Imagination

Imagination Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 8 Accepted Submission(s) : 3 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description There are four matrixs blow ,…

Day19 练习题

1.列举布尔值为False的值 0,[],{},(),False,’’,None 列如&#xff1a; if 0: 2.写函数&#xff1a; 根据范围获取其中被3和7整除的所有数的和&#xff0c;符合条件的数字个数以及符合条件的数字的总和 3.函数传递参数时&#xff0c;是否用的同一内存地址 name “hairui” de…

error U1087: cannot have : and :: dependents for same target

DDK下build -c错误:error U1087: cannot have : and :: dependents for same target 被build的source code所在path不能含有空格. 转载于:https://www.cnblogs.com/vcerror/p/4289079.html

网络通信基础常识

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、网络通信属于进程间通信 进程间通信的一种方法是使用套接字socket&#xff0c;网络通信其实就是位于网络中不同主机上面的2个进程之间的通信。 2、网络通信的层次 网络通信的层次&#xff0c;即…

Android NDK工程创建与编译运行

首发地址&#xff1a;http://www.eoeandroid.com/thread-201993-1-1.html一、 工程创建1. 创建一个Android工程配置好开发环境并加载好对应版本sdk后&#xff0c;选择菜单File->New-> Project创建工程&#xff0c;工程类型选择Android Project&#xff0c;如下图所示&…

[Quatsch]Quantum Or Optics

小生预言&#xff0c;鉴于目前CG产业中学术界与生产界之间的差异&#xff0c;未来必将有一门独立的学科&#xff0c;专门用于研究自然界的材质特性与表现&#xff0c;从此艺术界与学术界将呈现完美之统一&#xff0c;应该先在MIT或者Cornell出现。本人姑且将这门学科命名为“应…

Numbers

表示实数&#xff0c;Lua中没有整数。一般有个错误的看法CPU运算浮点数比整数慢。事实不是如此&#xff0c;用实数代替整数不会有什么误差&#xff08;除非数字大于100,000,000,000,000&#xff09;。Lua的numbers可以处理任何长整数不用担心误差。你也可以在编译Lua的时候使用…

查询命令:find、grep,which、whereis

一、find&#xff0c;查找某个文件的存放路径 find用来查找某个文件的存放位置。即你知道文件名字&#xff0c;但不知道放在哪里。 使用格式&#xff1a;“ find 查找路径 -name "要查找的文件名" ” 使用举例&#xff1a;find /etc -name "interfaces" ro…

C#事件 的讲解

一、事件的本质事件是软件系统里的两个子系统之间&#xff0c;或者两个模块之间&#xff0c;或者两个对象之间发送消息&#xff0c;并处理消息的过程。在面向对象的世界里&#xff0c;就可以统一认为是两个对象之间的行为。两个对象之间发送的这种消息&#xff0c;对发送方来讲…

phpMyAdmin密码设置

2019独角兽企业重金招聘Python工程师标准>>> 在使用phpMyAdmin操作数据库时&#xff0c;首先需要设置mysql的root用户的密码。具体操作参考前一篇博文。设置完mysql的root密码之后&#xff0c;需要对phpMyAdmin的登录进行一些配置。 未经配置的phpMyAdmin很不安全&a…