Gson的基本使用方法(google)
原文: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)的更多相关文章
- 生成JSON数据--Gson(谷歌)方法
Gson生成JSON数据方法: 创建相应的类,然后创建对象,toJson()进去就可以了 要求:生成如下JSON数据 1.{"age":4,"name":&qu ...
- gson的简单使用方法
gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的 ...
- java学习笔记(13) —— google GSON 实现json转化方法
1.配置struts.xml <action name="getGsonAction" class="com.test.action.json.GetGsonAct ...
- Error: Program type already present: com.google.gson.FieldAttributes 的解决方法
在app中的build.gradle中加入如下代码, configurations { all*.exclude group: 'com.google.code.gson' all*.exclude ...
- PHP二维码生成的方法(google APi,PHP类库,libqrencode等)
原文地址: http://blog.csdn.net/liuxinmingcode/article/details/7910975 ================================== ...
- 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/ ...
- Android中使用Gson解析JSON数据的两种方法
Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的 ...
- JSON(3)Google解析Json库Gson
本文参考 : http://www.cnblogs.com/chenlhuaf/archive/2011/05/01/gson_test.html 1.资料 官网: http://groups.goo ...
- google gson
发现了google的gson,因为之前对于protocolbuf有一些了解,带着一些好奇心,我开始使用了gson. 经过比较,gson和其他现有java json类库最大的不同时gson需要序列化得实 ...
随机推荐
- SqlServer 查询表、表说明、关联表、字段说明,语句汇总
----查询所有的表 SELECT * FROM SYSOBJECTS WHERE TYPE='U' ----根据表名查询所有的字段名及其注释 SELECT A.NAME,B.VALUE FROM S ...
- FFmpeg缩放swscale详解 <转>
利用ffmpeg进行图像数据格式的转换以及图片的缩放应用中,主要用到了swscale.h文件中的三个函数,分别是: struct SwsContext *sws_getContext(int srcW ...
- Thinkphp交友手机首页简明前台、后台
先来说下后台吧,后台要写后台模板-V,后台控制器-C 后台模板如下代码: <!DOCTYPE html> <html> <head> <meta charse ...
- Javascript 解构的用处
对象的解构赋值,可以很方便地将现有对象的方法,赋值到某个变量. let { log, sin, cos } = Math; 上面代码将Math对象的对数.正弦.余弦三个方法,赋值到对应的变量上,使用起 ...
- AJAX实现google搜索建议实战
搜索建议实战的目标是为了输入搜索内容,动态的进行匹配,效果图如下: 整体思路: 在客户端搜索框中触发onkeyup事件, 随时向PHP服务器请求当前输入框中的内容, PHP服务器获取到keywords ...
- vs2010 正式版官方下载地址
北京时间2010年4月12日12:00,微软Visual Studio 2010 正式版提供官方下载,眼下有三个版本号,Professional/Premium/Ultimate. 注意原页面的链接R ...
- [Hapi.js] Using the response object
When you use reply method: let resp = reply('hello world') It actually return an response object. By ...
- kaggle之泰坦尼克的沉没
Titanic 沉没 参见:https://github.com/lijingpeng/kaggle 这是一个分类任务,特征包含离散特征和连续特征,数据如下:Kaggle地址.目标是根据数据特征预测一 ...
- Git 笔记一 Git简介
git 笔记一 什么是版本控制 所谓版本控制就是记录对文件的修改记录,这样以后就能回退到需要的 版本.比如你对一段代码进行了几次修改,有几次修改不想要了,如果 使用了版本控制,就可以回退到未做这些修改 ...
- 前端--关于javascript对象
在javascript中对象是一种基本的数据类型,在数据结构上是一种散列表,可以看作是属性的无序集合,除了原始值其他一切都是对象.它可以用来表示现实世界中或者我们大脑中抽象出来的客体,这和其他面向对象 ...