原文:http://www.jianshu.com/p/e740196225a4

原作者:怪盗kidou

依赖包配置:

    <dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>

测试代码:

import java.util.List;
import java.util.ArrayList; import com.google.gson.Gson;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken; public class TestGson { private Gson gson = new Gson(); /**
* 测试main
*/
public static void main(String[] args) {
TestGson test = new TestGson();
test.test9();
} /**
* json字符串转基本数据类型(String虽不是基本数据类型,但是是值传递,与基本数据类型处理相似)
*/
public void test1() {
int i = gson.fromJson("100", int.class); //
double d = gson.fromJson("\"99.99\"", double.class); // 99.99
boolean b = gson.fromJson("true", boolean.class); // true
String str = gson.fromJson("String", String.class); // String System.out.println(i);
System.out.println(d);
System.out.println(b);
System.out.println(str);
} /**
* 基本数据类型转json字符串(String虽不是基本数据类型,但是是值传递,与基本数据类型处理相似)
*/
public void test2() {
String jsonNumber = gson.toJson(100); //
String jsonBoolean = gson.toJson(false); // false
String jsonString = gson.toJson("String"); // "String" System.out.println(jsonNumber);
System.out.println(jsonBoolean);
System.out.println(jsonString);
} /**
* java对象转json字符串
*/
public void test3() {
User user = new User("ZhangSan", 24);
String jsonObject = gson.toJson(user); // {"name":"ZhangSan","age":24} System.out.println(jsonObject);
} /**
* json字符串转java对象
*/
public void test4() {
String jsonString = "{\"name\":\"ZhangSan\",\"age\":24}";
User user = gson.fromJson(jsonString, User.class); System.out.println(user.getName() + " | " + user.getAge() + " | " + user.getEmailAddress());
} /**
* @SerializedName()的使用_1
*/
public void test5() {
User user = new User("ZhangSan", 24, "abc@163.com");
String jsonObject = gson.toJson(user); // User.emailAddress未加'@SerializedName("email_address")'时的转换效果如下:
// {"name":"ZhangSan","age":24,"emailAddress":"abc@163.com"} // User.emailAddress加了'@SerializedName("email_address")'时的转换效果如下:
// {"name":"ZhangSan","age":24,"email_address":"abc@163.com"} System.out.println(jsonObject);
} /**
* @SerializedName()的使用_2
*/
public void test6() {
String json = "{\"name\":\"ZhangSan\",\"age\":24,\"emailAddress\":\"abc_1@example.com\","
              +"\"email\":\"abc_2@example.com\",\"email_address\":\"abc_3@example.com\"}";
User user = gson.fromJson(json, User.class); System.out.println(user.emailAddress); // abc_3@example.com // 当上面的三个属性(email_address、email、emailAddress)都中出现任意一个时均可以得到正确的结果。
// 注:当多种情况同时出时,以最后一个出现的值为准。
// 注:alternate需要2.4版本,本次测试的版本不可使用
} /**
* json字符串转基本类型数组(String虽不是基本数据类型,但是是值传递,与基本数据类型处理相似)
*/
public void test7() {
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
String[] strings = gson.fromJson(jsonArray, String[].class); System.out.println(strings[1]);
} /**
* TypeToken来实现对泛型的支持_1 将String[].class 直接改为 List<String>.class
* 是行不通的。需要进行泛型擦除。
*/
public void test8() {
String jsonArray = "[\"Android\",\"Java\",\"PHP\"]";
List<String> stringList = gson.fromJson(jsonArray, (new TypeToken<List<String>>() {
}).getType()); System.out.println(stringList.get(1));
} /**
* TypeToken来实现对泛型的支持_2
*/
@SuppressWarnings("serial")
public void test9() {
Result<List<User>> result = new Result<List<User>>();
result.setCode(200);
result.setMessage("success");
result.setData(new ArrayList<User>() {
{
for (int i = 0; i < 2; i++) {
this.add(new User("ZhangSan" + i, 25 + i, "abc@163.com"));
}
}
}); // 不使用TypeToken无法将User的内容转换出来
// fromJson()方法也是一样需要使用TypeToken指定要转换成的java对象类型
String gsonStr = gson.toJson(result, (new TypeToken<Result<List<User>>>() {}).getType());
System.out.println(gsonStr);
} } class User { public String name; public int age; // @SerializedName("email_address") // test5()使用
// @SerializedName(value="emailAddress",alternate={"email","email_address"})//test6()使用
public String emailAddress; /**
* 构造函数1
*/
public User() {
super();
} /**
* 构造函数2
*/
public User(String name, int age) {
super();
this.name = name;
this.age = age;
} /**
* 构造函数3
*/
public User(String name, int age, String emailAddress) {
super();
this.name = name;
this.age = age;
this.emailAddress = emailAddress;
} // getters/setters(略) } class Result<T> { public int code; public String message; public T data; /**
* 构造函数
*/
public Result() {
super();
} // getters/setters(略) }

Gson的基本使用方法(google)的更多相关文章

  1. 生成JSON数据--Gson(谷歌)方法

    Gson生成JSON数据方法: 创建相应的类,然后创建对象,toJson()进去就可以了 要求:生成如下JSON数据 1.{"age":4,"name":&qu ...

  2. gson的简单使用方法

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

  3. java学习笔记(13) —— google GSON 实现json转化方法

    1.配置struts.xml <action name="getGsonAction" class="com.test.action.json.GetGsonAct ...

  4. Error: Program type already present: com.google.gson.FieldAttributes 的解决方法

    在app中的build.gradle中加入如下代码, configurations { all*.exclude group: 'com.google.code.gson' all*.exclude ...

  5. PHP二维码生成的方法(google APi,PHP类库,libqrencode等)

    原文地址: http://blog.csdn.net/liuxinmingcode/article/details/7910975 ================================== ...

  6. Creating a Store Locator with PHP, MySQL & Google Maps(保存地图坐标 经纬度方法 google mysql)

    Google Geo APIs Team August 2009 This tutorial is intended for developers who are familiar with PHP/ ...

  7. Android中使用Gson解析JSON数据的两种方法

    Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下   Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...

  8. JSON(3)Google解析Json库Gson

    本文参考 : http://www.cnblogs.com/chenlhuaf/archive/2011/05/01/gson_test.html 1.资料 官网: http://groups.goo ...

  9. google gson

    发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson. 经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实 ...

随机推荐

  1. redis 的基本语法

    Redis::__construct构造函数 $redis = new Redis(); connect, open 链接redis服务 参数 host: string,服务地址 port: int, ...

  2. qt绘制设备

    # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from PyQt4.QtGui import  * from Py ...

  3. A10 平板开发一硬件平台搭建

    A10板子从原理图设计.接插件布局.PCB设计到物料采购以及贴片,最后调试,花了不少时间,刚刚把屏点亮了,系统总算跑起来了.整个过程遇到不少问题,包括与外面工程师沟通.硬件测试.软件调试,还有很多问题 ...

  4. java多态的理解----部分非原创

    所谓多态,其实就是对于同一件事情,不同的对象要采取不同的行为,或者同一个对象在不同的情况下需要采取不同的行为方式. 不同的对象要采取不同的行为: 这有两种实现方式:接口实现和子类重新父类方法.这两种实 ...

  5. mybatis于Date和DateTime现场插入

    最近,该公司使用MyBatis3做数据持久层,有在该领域Date和DateTime种类,只有在插入数据时属性设置为一个实体Timestamp将相应mysql的DateTime类型.Date会相应mys ...

  6. 前端--关于javascript函数

    终于可以说说函数了,函数是javascript设计最出色的地方,可以说它是所有概念中最重要的一个,因为围绕函数而阐述的周边概念涵盖了javascript的方方面面,所以理解了函数可以说对javascr ...

  7. solr group分组查询

    如:http://localhost:8080/solr/test_core/select?q=*:*&wt=json&indent=true&group=true&g ...

  8. Could not load file or assembly 试图加载格式不正确的程序

    问题: 今天发布项目的时候遇到这个破问题,纳闷了好久,最后想起来自己改过程序生成的目标平台(原生成目标平台是Any CPU,被我改成了X86的). 解决方法: 改回原来的Any CPU 从新发布即可.

  9. Git入门——基础知识问答

    问题一:为什么要选择Git作为Android开发的版本控制工具?     答:1)git是android项目和社区的统一语言.            2)高通版本发布频繁,需要与平台及时同步,快速re ...

  10. Android-现场保护

    现场保护 当一个活动进入到了停止的状态,是有可能被系统回收的,我们都学过Activity的生命周期 当活动处于onPause() ,onStop() ,onDestroy() 三种状态时程序可能会被A ...