原文: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. Unable to resolve target 'android-14' 解决办法

    学习安卓的时候用Eclipse导入工程之后出现Unable to resolve target 'android-14' 这样的问题,代码确定没有问题,因为是从网上教程下载的示例代码,上网搜索了一下, ...

  2. PPT去掉图片白色背景

    双击图片,点击菜单栏“删除背景”,用矩形框选中想要的区域,然后将鼠标焦点移到图片外,单击鼠标即可.

  3. Guice 学习(六)使用Provider注入服务( Provider Inject Service)

    1.定义接口 package com.guice.providerInject; import com.google.inject.ProvidedBy; public interface Servi ...

  4. EasyUI 两个日期比较

    两个日期进行比较,后一个日期不能早于晚一个日期.需要自己去扩展validatebox的方法 1.对比2个密码是否相同 $.extend($.fn.validatebox.defaults.rules, ...

  5. SICP 习题 (1.9) 解题总结

    SICP 习题 1.9 开始针对“迭代计算过程”和“递归计算过程”,有关迭代计算过程和递归计算过程的内容在书中的1.2.1节有详细讨论,要完成习题1.9,必须完全吃透1.2.1节的内容,不然的话,即使 ...

  6. fuser:用文件或者套接口表示进程

    fuser:用文件或者套接口表示进程 作用:fuser命令用文件或者套接口表示进程. 用法:fuser [-a | -s | -c] [-4 | -6] [-n space] [-k [-i] [-s ...

  7. (转)Ubuntu中使用dpkg安装deb文件提示依赖关系问题,仍未被配置

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5638149.html 参考网址: http://zhidao.baidu.com/link?url=b ...

  8. 评论PK投票功能的手机版

    ajax投票.点赞.回复,投票后自动转到查看投票结果,投票结果进度条动画显示 地址:http://files.cnblogs.com/files/macliu/hyw_wap.rar 效果图: 首页:

  9. 关于《Cocos2d-x建工程时避免copy文件夹和库》的更新

    在前几篇博文中大概了解了Cocos2d-x引擎的基本结构后打算开始实际操作,便在网上转载了一篇关于VS新建Cocos2d-x项目的文章.今天实际操作的时候发现博主使用的引擎版本和我的不一致(<C ...

  10. dede调用指定栏目的标签

    {dede:type typeid='1'} <a href="[field:typelink /]">[field:typename /]</a> {/d ...