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需要序列化得实 ...
随机推荐
- 【转】TI-Davinci开发系列之六CCS5.2调试Linux内核
上转博文<TI-Davinci开发系列之五CCS5.2使用gdbserver远程调试应用程序> 使用CCS5.2远程调试内核时,只需导入Linux内核源码,而不需要编译内核,也就不会用到交 ...
- Beans(dp,两次dp)
Beans Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 批量创建prefab
using UnityEngine; using System.Collections; using UnityEngine.UI; using System.IO; using UnityEdito ...
- AngularJs学习(1)
以下是学习过程中的笔记,有些是网上摘录 <!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta ...
- Transform 1
Transform字面上就是变形,改变的意思.在CSS3中transform主要包括以下几种:旋转rotate.扭曲skew.缩放scale和移动translate以及矩阵变形matrix.下面我们一 ...
- c3p0xml配置详解
<?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-con ...
- orcl 行转列的存储过程
CREATE or replace PROCEDURE sp_fixWage AUTHID CURRENT_USER as --此处需要注意的 authid current_user 这个属性 详细 ...
- Linux命令:FREE
FREE(1) Linux User's Manual FREE(1) NAME free - Display a ...
- NSString / NSMutableString 字符串处理,常用代码 (实例)
http://blog.csdn.net/likendsl/article/details/7417878 Objective-C 中核心处理字符串的类是 NSString 与 NSMutableSt ...
- COMException 依赖服务或组无法启动(0x8007042C)处理办法
问题分析:这个问题主要原因是由于服务列表中的windows management instrumentation这个服务无法启动 问题解决办法: 点击屏幕左下角:开始-运行-输入regedit 打开注 ...