哇,原来我已经潜水2年多了,还是需要养成习惯写写东西啊。

最近在做一个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;}@Overridepublic String toString(){return name + ":" +age;}
}

View Code

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

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的同学有所帮助。

程序员的基础教程:菜鸟程序员

Gson简要使用笔记相关推荐

  1. Javaweb回炉简要学习笔记

    Javaweb回炉简要学习笔记 1.高难度面试题 ​ 请你谈谈网站是如何进行访问的? 输入一个域名:回车 检查本机的配置文件C:\Windows\System32\drivers\etc\hosts下 ...

  2. 机原、机设的主干知识_简要复习笔记

    声明:本人主要依据北航2022级硕士全国统考机械学院专业科目考试大纲对机原机设进行了知识梳理,仅个人复习使用,不作任何其他用途.如果写的有错误,欢迎指出. 在此之前,本人已对机原机设进行了较为系统的复 ...

  3. Gson踩坑笔记:为什么对象的构造方法没有被执行?

    前言 最近做项目遇到了一个很奇怪的问题,情况如下: 创建对象TestBean,其中type和name需要接口返回并解析,time字段需要客户端修改,做一些必要的记录,希望time的默认值为10: va ...

  4. jQuery,Ajax.animate,SVG(简要学习笔记二十)[完结篇]

    1.$和jquery在全局命名空间中定义的唯一两个变量. 2.jquery是工厂函数,不是构造函数.他返回一个新创建的对象. 3.jquery的四种调用方式:     <1>传递CSS选择 ...

  5. HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)...

    1.Web Storage HTML5除了Canvas元素之外,还有一个非常重要的功能那就是客户端本地保存数据的Web Storage功能. 以前都是用cookies保存用户名等简单信息. 但是coo ...

  6. JavaScript权威设计--CSS(简要学习笔记十六)

    1.Document的一些特殊属性 document.lastModified document.URL document.title document.referrer document.domai ...

  7. JavaScript权威设计--事件冒泡,捕获,事件句柄,事件源,事件对象(简要学习笔记十八)...

    1.事件冒泡与事件捕获 2.事件与事件句柄   3.事件委托:利用事件的冒泡技术.子元素的事件最终会冒泡到父元素直到跟节点.事件监听会分析从子元素冒泡上来的事件. 事件委托的好处:     1.每个函 ...

  8. 【python】urllib和urllib3,requests 简要概括---笔记

    '''urllib和urllib3,requestsurl:协议://存放资源的地址(域名)/具体的资源https://bj.lianjia.com/zufang/dghfjhsjdf648.html ...

  9. kl散度度量分布_概率图简要模型笔记(二)马尔可夫随机场与KL散度、最大熵、指数族分布、高斯分布、极大似然分布...

    这一篇文章主要是想捋一捋KL散度.最大熵.指数族分布这些东西之间的关系,这是一些非常基本的知识点,刚入门机器学习的时候,傻傻分不清楚,现在回过头来看,其实很多东西都可以串起来,不得不感叹数学真是一个很 ...

最新文章

  1. 嵌入式开发在过去20年中是如何演变的
  2. 梦幻西游服务器维护到几点,《梦幻西游》维护到几点 梦幻西游维护时间
  3. nginx服务器配置安全维护,Nginx服务器相关的一些安全配置建议
  4. Webmax简易入门操作手册(一)
  5. 电脑点击我的计算机无法打开,双击我的电脑打不开怎么办
  6. 【2017-01-09】 资料链接摘录
  7. Sekiro(只狼)
  8. Ubuntu 22.04 LTS apt-get update 报 Key is stored in legacy trusted.gpg keyring 警告解决方案
  9. 【漫画】分享16张程序员高端漫画~
  10. Android 的Recovery机制
  11. 分布式秒杀电商-微服务架构图 上帝视角分析
  12. 游戏行业的发展前景分析
  13. 微生物共现网络可视化:实现布局自由
  14. 个税报税服务器证书不合法,【问答】本月个税申报,这4个问题一定要搞清楚!...
  15. ZZULIOJ 1787 生化危机 (vector+DFS)
  16. svn: E170001: 认证失败--文件夹不存在
  17. java字符串数组转数字数组_Java数字字符串如何转化为数字数组并且排序
  18. NVME-SQ、CQ DoorBell
  19. 百度产品经理笔试题目(长沙地区)
  20. 联想拯救者Y9000-ubuntu-无线网卡无效

热门文章

  1. 图解Win7下安装Oracle 12c
  2. C++ code:main参数
  3. Codeforces 359D Pair of Numbers | 二分+ST表+gcd
  4. Android学习笔记进阶十三获得本地全部照片
  5. MySQL 数据库 InnoDB 和 MyISAM 数据引擎的差别
  6. 使用Dropbox+Justwriting+Markdown建立个人博客
  7. JavaScript那些事儿-不被知晓的预解释
  8. 做报表时用到的一个存储过程
  9. 3x3,5x5,7x7,9x9卷积核性能比较
  10. 计算机无法识别华为m3,华为8寸M3(非青春版)电脑连接问题报告