json解析之gson

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。

Gson里最重要的对象有2个Gson 和 GsonBuilder

Gson有2个最基本的方法

1) toJson() – 转换java 对象到JSON

2) fromJson() – 转换JSON到java对象

对于泛型对象,使用fromJson(String, Type)方法来将Json对象转换成对应的泛型对象

new TypeToken<>(){}.getType()方法取得Type

如: new TypeToken<List<String>>(){}.getType()

new TypeToken<List<Person>>(){}.getType()

new TypeToken<List<Map<String, String>>>(){}.getType()

GsonBuilder

//注意这里的Gson的构建方式为GsonBuilder,区别于Gson gson = new Gson();

Gson gson = new GsonBuilder()

.excludeFieldsWithoutExposeAnnotation() //不导出实体中没有用@Expose注解的属性

.enableComplexMapKeySerialization() //支持Map的key为复杂对象的形式

.serializeNulls().setDateFormat("yyyy-MM-dd HH:mm:ss:SSS")//时间转化为特定格式

.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)//会把字段首字母大写,注:对于实体上使用了@SerializedName注解的不会生效.

.setPrettyPrinting() //对json结果格式化.

.setVersion(1.0)    //有的字段不是一开始就有的,会随着版本的升级添加进来,那么在进行序列化和返序列化的时候就会根据版本号来选择是否要序列化.

//@Since(版本号)能完美地实现这个功能.还的字段可能,随着版本的升级而删除,那么

//@Until(版本号)也能实现这个功能,GsonBuilder.setVersion(double)方法需要调用.

.create();

参考阅读

Json转换利器Gson之实例一-简单对象转化和带泛型的List转化 http://blog.csdn.net/lk_blog/article/details/7685169

Json转换利器Gson之实例二-Gson注解和GsonBuilder   http://blog.csdn.net/lk_blog/article/details/7685190

Json转换利器Gson之实例三-Map处理(上)  http://blog.csdn.net/lk_blog/article/details/7685210

Json转换利器Gson之实例四-Map处理(下)  http://blog.csdn.net/lk_blog/article/details/7685224

Json转换利器Gson之实例五-实际开发中的特殊需求处理 http://blog.csdn.net/lk_blog/article/details/7685237  重要

Json转换利器Gson之实例六-注册TypeAdapter及处理Enum类型 http://blog.csdn.net/lk_blog/article/details/7685347  不常用

代码

辅助类

public class JsonService

{

public Person getPerson()

{

Person person = new Person(1, "xiaoluo", "广州");

return person;

}

public List<Person> getPersons()

{

List<Person> persons = new ArrayList<Person>();

Person person = new Person(1, "xiaoluo", "广州");

Person person2 = new Person(2, "android", "上海");

persons.add(person);

persons.add(person2);

return persons;

}

public List<String> getString()

{

List<String> list = new ArrayList<String>();

list.add("广州");

list.add("上海");

list.add("北京");

return list;

}

public List<Map<String, String>> getMapList()

{

List<Map<String, String>> list = new ArrayList<Map<String, String>>();

Map<String, String> map1 = new HashMap<String, String>();

map1.put("id", "001");

map1.put("name", "xiaoluo");

map1.put("age", "20");

Map<String, String> map2 = new HashMap<String, String>();

map2.put("id", "002");

map2.put("name", "android");

map2.put("age", "33");

list.add(map1);

list.add(map2);

return list;

}

}

测试类

public static void main(String[] args)

{

Gson gson = new Gson();

JsonService jsonService = new JsonService();

Person person = jsonService.getPerson();

System.out.println("person: " + gson.toJson(person));

//    对于Object类型,使用 fromJson(String, Class)方法来将Json对象转换成Java对象

Person person2 = gson.fromJson(gson.toJson(person), Person.class);

System.out.println(person2);

System.out.println("------------------------------------------------");

List<Person> persons = jsonService.getPersons();

System.out.println("persons: " + gson.toJson(persons));

/*

* 对于泛型对象,使用fromJson(String, Type)方法来将Json对象转换成对应的泛型对象

* new TypeToken<>(){}.getType()方法

*/

List<Person> persons2 = gson.fromJson(gson.toJson(persons), new TypeToken<List<Person>>(){}.getType());

System.out.println(persons2);

System.out.println("------------------------------------------------");

List<String> list = jsonService.getString();

System.out.println("String---->" + gson.toJson(list));

List<String> list2 = gson.fromJson(gson.toJson(list), new TypeToken<List<String>>(){}.getType());

System.out.println("list2---->" + list2);

System.out.println("------------------------------------------------");

List<Map<String, String>> listMap = jsonService.getMapList();

System.out.println("Map---->" + gson.toJson(listMap));

List<Map<String, String>> listMap2 = gson.fromJson(gson.toJson(listMap), new TypeToken<List<Map<String, String>>>(){}.getType());

System.out.println("listMap2---->" + listMap2);

System.out.println("------------------------------------------------");

}

输出结果

person: {"id":1,"name":"xiaoluo","address":"广州"}

Person [id=1, name=xiaoluo, address=广州]

------------------------------------------------

persons: [{"id":1,"name":"xiaoluo","address":"广州"},{"id":2,"name":"android","address":"上海"}]

[Person [id=1, name=xiaoluo, address=广州], Person [id=2, name=android, address=上海]]

------------------------------------------------

String---->["广州","上海","北京"]

list2---->[广州, 上海, 北京]

------------------------------------------------

Map---->[{"id":"001","age":"20","name":"xiaoluo"},{"id":"002","age":"33","name":"android"}]

listMap2---->[{id=001, age=20, name=xiaoluo}, {id=002, age=33, name=android}]

------------------------------------------------

时间: 2024-12-21 16:27:01

json解析之gson的相关文章

Android应用之——谷歌官方Json解析工具Gson的使用

一.Gson简介 Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象.也就是Java对象与json字符串间的互相转换,解析. 二.使用方法 Gson的应用主要为toJson与fromJson两个转换函数,而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象.即先创建好对应的javabean,javabean中的字段与要转换的

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例

Android JSON解析库Gson和Fast-json的使用对比和图书列表小案例 继上篇json解析,我用了原生的json解析,但是在有些情况下我们不得不承认,一些优秀的json解析框架确实十分的好用,今天我们为了博客的保质保量,也就不分开写,我们直接拿比较火的Gson和Fast-json来使用,末尾在进行一些分析 Android JSON原生解析的几种思路,以号码归属地,笑话大全,天气预报为例演示 一.各有千秋 两大解析库的东家都是巨头,一个来自于Google官方,一个来自阿里巴巴,我们这

Json解析与Gson解析

本文主要介绍json最原始的解析与google提供的gson工具类解析 ①json解析 1 /** 2 * 普通的json解析 3 * @param s 4 * @throws JSONException 5 */ 6 private void jsonJieXi(String s) throws JSONException { 7 //创建json对象 8 JSONObject jsonObject1 = new JSONObject(s); 9 String retcode = jsonOb

【Android开发经验】超好用的json解析工具——Gson项目使用介绍

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在上一篇文章中,我们简单的介绍了json数据格式,并介绍了如何使用Android自带的json工具,完成json数据的生成与解析.但是就像我所说的,自带的工具类太难用了!因此这篇文章,会介绍一个json解析的非常好的工具,那就是google的开源项目Gson. 咱们这次不介绍Gson里面的常用类了,因为常用的几个类非常的简单,我们直接上手开始用,看看Gson是多么的强大! 当然,如果使用第三方的项目,我们

关于浮点数的json解析

最近在工作中遇到个问题 通过post请求从其它系统(好像是C#写的)获得json字符串 {"geometry":{"rings":[[[40426489.331430912,3001752.0858958033],[40426225.692211367,3001750.0779145896],[40426202.957955509,3001594.0301330695],[40426290.959128119,3001559.0584689],[40426390.7

JSON格式之GSON解析

JSON格式之GSON解析 最近在做websocket相关,项目需要JSON解析.相较之下感觉google的GSON解析不错. JAVA后台 Gson提供了fromJson()方法来实现从Json相关对象到java实体的方法 1.对象类型 采用上图的第一种方法. Gson gson =new Gson(); User user= gson.fromJson(str, User.class); 2.Map.List等 采用上图的第二种方法. Type type = new TypeToken<Ma

Android JSON 解析库的使用 - Gson 和 fast-json

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C.C++.C#.Java.JavaScript.Perl.Python等).这些特性使JSON成为理想的数据交换语言. 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率). GSON是由谷歌官方推出的 JSON 与 Java 对象转化的 Java类库 fast-json 阿里推

[转] 各种Json解析工具比较 - json-lib/Jackson/Gson/FastJson

JSON技术的调研报告 一 .各个JSON技术的简介和优劣1.json-libjson-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如

Json解析速度比较-Android API、Gson、Fastjson

IOS现成的API里的json解析速度非常快,这里就不说了,今天对比一下Android里面json的解析库. 首先第一个是Android API里面自带的json解析,其次是谷歌提供的Gson解析库(开源),其次是在网上看到的解析很快速的阿里巴巴分享的Fastjson包.Android自带的json解析大家一定都很熟悉了,这里不介绍了,这里详细说说谷歌提供的另一套解析库Gson: gson的使用方法非常的简单.只需要将需要解析的json字符串和对应的Bean类xing型传递给GSON类的from