Google Gson的使用

Gson 是 Google 发布的 JSON 解析工具, 非常好用,  项目里用到 JSON 解析, 无非两种情况: 对象转化为 JSON 或 JSON 转化为对象. 下面的代码演示了这两种情况下, Gson工具的使用, 要注意, 下面的示例代码中, JSON 字符串中的 key 和 JavaBean 中的字段是一样的, 也可以不一样, 后面会说.

/**
 * Gson 的使用
 * @author Gaoyuan4122
 *
 */
public class TestGson {
	private Gson gson;

	@Before
	public void before() {
		gson = new Gson();
	}

	/**
	 * 数组放进数组或List转化为json
	 * ["aaa","bbb","ccc"]
	 * ["gaoyuan1","gaoyuan2","gaoyuan3"]
	 * @throws Exception
	 */
	@Test
	public void testToJson1() throws Exception {
		String[] ss = new String[]{"aaa","bbb","ccc"};
		String json = gson.toJson(ss);
		System.out.println(json);
		List<String> list = new ArrayList<String>();
		list.add("gaoyuan1");
		list.add("gaoyuan2");
		list.add("gaoyuan3");
		String json2 = gson.toJson(list);
		System.out.println(json2);
	}

	/**
	 * 数据放进Map中转化为json
	 * {"age":"22","name":"gaoyuan"}
	 * @throws Exception
	 */
	@Test
	public void testToGson2() throws Exception {
		Map<String, String> map = new HashMap<String,String>();
		map.put("name", "gaoyuan");
		map.put("age", "22");
		String json = gson.toJson(map);
		System.out.println(json);
	}

	/**
	 * List<Map<String,String>> 转化为json
	 * [{"age":"22","name":"gaoyuan"},{"age":"23","name":"gaoyuan3"}]
	 * @throws Exception
	 */
	@Test
	public void testToGson3() throws Exception {
		List<Map<String,String>> list = new ArrayList<Map<String,String>>();
		Map<String, String> map = new HashMap<String,String>();
		map.put("name", "gaoyuan");
		map.put("age", "22");
		Map<String, String> map2 = new HashMap<String,String>();
		map2.put("name", "gaoyuan3");
		map2.put("age", "23");
		list.add(map);
		list.add(map2);
		String json = gson.toJson(list);
		System.out.println(json);
	}

	/**
	 * 使用gson中提供的JsonObject创建json
	 * {"response":"error","message":"用户名不存在"}
	 */
	@Test
	public void testToGson4() throws Exception{
		JsonObject jo = new JsonObject();
		jo.addProperty("response", "error");
		jo.addProperty("message", "用户名不存在");
		String json = gson.toJson(jo);
		System.out.println(json);
	}

	/**
	 * List里放复杂对象转化为json
	 * User有三个普通属性, 以及一个Address对象属性
	 * [{"username":"gaoyuan","password":"111","age":22,"address":{"id":1,"name":"henan"}},{"username":"gaoyuan2","password":"222","age":23,"address":{"id":2,"name":"henan2"}}]
	 * @throws Exception
	 */
	@Test
	public void testToGson5() throws Exception{
		List<User> users = new ArrayList<User>();
		users.add(new User("gaoyuan", "111", 22, new Address(1, "henan")));
		users.add(new User("gaoyuan2", "222", 23, new Address(2, "henan2")));
		String json = gson.toJson(users);
		System.out.println(json);
	}

	/**
	 * Map<String,List<Object>> 转json
	 * {"response":"topic","price":100.0,"topic_list":[{"id":1,"name":"sdf","pic":"http://xxx"},{"name":"hehe","pic":"adfafdasf"}]}
	 * @throws Exception
	 */
	@Test
	public void testToGson6() throws Exception {
		Map map = new HashMap();
		map.put("response", "topic");
		List list = new ArrayList();
		list.add(new Topic(1,"sdf","http://xxx"));
		Topic topic2 = new Topic();
		topic2.setName("hehe");
		topic2.setPic("adfafdasf");
		list.add(topic2);
		map.put("topic_list", list);
		map.put("price", 100.0f);
		String json = gson.toJson(map);
		System.out.println(json);
	}

	/**
	 * 从json中获取需要的部分
	 * {"response":"help","helplist":[{"id":1,"title":"购物指南"},{"id":2,"title":"配送方式"},{"id":3,"title":"售后服务"},{"id":6,"title":"测试三"}],"version":"12"}
	 * 要获取 helplist
	 * [{"id":1,"title":"购物指南"},{"id":2,"title":"配送方式"},{"id":3,"title":"售后服务"},{"id":6,"title":"测试三"}]
	 * @throws Exception
	 */
	@Test
	public void testFromGson1() throws Exception {
		String json = "{\"response\":\"help\",\"helplist\":[{\"id\":1,\"title\":\"购物指南\"},{\"id\":2,\"title\":\"配送方式\"},{\"id\":3,\"title\":\"售后服务\"},{\"id\":6,\"title\":\"测试三\"}],\"version\":\"12\"}";
		JsonObject fromJson = gson.fromJson(json, JsonObject.class);
		JsonObject jsonObj = (JsonObject) fromJson.get("helplist");
		System.out.println(jsonObj.toString());
	}

	/**
	 * json转对象
	 * {"id":1,"title":"购物指南"} 转为 Topic对象
	 * @throws Exception
	 */
	@Test
	public void testFromGson2() throws Exception {
		String json = "{\"id\":1,\"title\":\"购物指南\"}";
		Topic topic = gson.fromJson(json, Topic.class);
		System.out.println(topic);
	}

	/**
	 * 从json中获取想要的部分, 并转化为List中的对象
	 *
		{
		  "response": "topic",
		  " topic ": [
		    {
		      "id": "专题活动ID",
		      "name": "专题活动名称",
		      "pic": "图片URL"
		    },
		    {
		      "id": "专题活动ID",
		      "name": "专题活动名称",
		      "pic": "图片URL"
		    }
		  ]
		}
	 *
	 * @throws Exception
	 */
	@Test
	public void testFromGson3() throws Exception {
		String json = "{\"response\":\"topic\",\"topic\": [{\"id\": \"专题活动ID\",\"name\": \"专题活动名称\",\"pic\": \"图片URL\"},{ \"id\": \"专题活动ID\", \"name\": \"专题活动名称\", \"pic\": \"图片URL\" }]}";
		JsonObject jsonObj = gson.fromJson(json, JsonObject.class);
		Type type = new TypeToken<List<Topic>>(){}.getType();
		List<Topic> topics = gson.fromJson(jsonObj.get("topic"), type);
		System.out.println(topics);
	}

	@After
	public void after() {
		gson = null;
	}
}

对应的 JavaBean 这里就不再给出了.

如果 JSON 字符串中的 key 和 JavaBean 对象中的字段不一样, 需要在 JavaBean 的字段上加一个注解:

	@SerializedName("user_id")
	private int userId;

加了这个注解之后, JSON 和 JavaBean 的互相转化就会按照注解配置的进行了.

除此之外, 还有一些常用的方法:

// 将 JSON 字符串转化为一个 JsonElement, 在 Gson 中所有的 JSON 元素都是 JsonElement, 有四个子类: JsonArray, JsonNull,
// JsonObject, JsonPrimitive, 前面三个比较常用.
JsonElement jsonElement = new JsonParser().parse(jsonStr);
// 判断 JsonElement 是否为 JsonArray
if (jsonElement.isJsonArray()) {
    // ...
}
// 将 JsonElement 转化为 JsonArray
JsonArray jsonArray = element.getAsJsonArray();
// 将 JsonElement 转化为 JsonObject
JsonObject fontsObject = jsonElement.getAsJsonArray().get(1).getAsJsonObject();
// 获取 JsonElement 的值, 注意这个方法和toString返回的是不同的.
jsonArray.get(0).getAsString()

基本的用法就是这些, 还可以参考如下博客:

http://blog.csdn.net/lk_blog/article/details/7685169

时间: 2024-11-08 18:53:25

Google Gson的使用的相关文章

[转]Json转换神器之Google Gson的使用

这几天,因为项目的需要,接触了Google的Gson库,发现这个东西很好用,遂记下简单的笔记,供以后参考.至于Gson是干什么的,有什么优点,请各位同学自行百度.话不多说,切入正题: 1. 下载Gson的jar包,拷贝到项目的lib文件夹中,并将其加入到buildPath中.使用maven的同学,直接在pom中加入以下依赖即可: ? 1 2 3 4 5 <dependency> <groupId>com.google.code.gson</groupId> <ar

Google Gson解析Json数据应用实例

转自:http://lixigao449778967.blog.163.com/blog/static/24985164201269105928783/ 1.需要的Jar包 1) Google Gson(gson-xxx.jar)下载地址:http://code.google.com/p/google-gson/downloads/list 2)JUnit4 2. 应用实例代码 下载地址:http://download.csdn.net/source/3499627 包括如下类: 1)普通Jav

Android程序 依赖库引用Gson 报java.lang.NoClassDefFoundError: com/google/gson/Gson 解决方法

Android 程序所依赖一个Library程序B , B 程序中用到格式化json串,转换成标准json串的要求 public static String jsonFormatter(String uglyJSONString) { Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(uglyJSONStri

Android网络之数据解析----使用Google Gson解析Json数据

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4063452.html 联系方式:[email protected] [正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                             

Could not find class com.google.gson.Gson

在Android开发中使用gson解析json字符串,出现异常:java.lang.classnotfoundexception:com.google.gson.Gson.解决方案如下: 这个异常的怪异之处在于,你可能已经将google的gson包导入了项目,但是为什么应用程序仍然报错,说找不到这个类? 2 原因在于此包只是导入了项目,但是并没有打包到应用程序中,所以应用运行的时候会找不到这个包. 3 解决方案为:右击项目->buildpath->config build path->o

Google Gson 使用简介

1.如何将数组转化为 json 串? 下面的例子中我们示例如何将一个数据转换成 json 串,并使用 Gson.toJson() 方法将数组序列化为 JSON,以及Gson.fromJson() 方法将 JSON 串反序列化为 java 数组. import com.google.gson.Gson; public class ArrayToJson { public static void main(String[] args) { int[] numbers = {1, 1, 2, 3, 5

com.google.gson.stream.MalformedJsonException的解决办法

关于Gson解析的异常,如果你程序出现以下的异常,有两种可能性:‘ 1. 找到一个JSON格式的验证工具,这个网上很多大家可以百度下: 2.你的JSON格式验证没有问题,却一直报这个解析错误,请确定你的JSON数据没有多余的空格.这个空格有可能在IO流读取的时候多读了. com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true

Unable to execute dex: Multiple dex files defineLcom/google/gson/JsonDeserializer;

这是异常想必大家都知道的,是关于一个android jar包冲突的问题.为什么还要提呢,是因为这玩意真心让人蛋疼.有些时候稍微不注意(手贱)多导入一个包,就完蛋了.(jar包多的话搞不好带一上午调试). 1.蛋疼的了排查所有的第三方jar包(包括自定义Library中的),把多余的jar和重复的jar全部去掉,但是错误依然没有解决,搭眼一瞧,果断是没有重复的和多余的jar了好吧,为何还报错类? 没办法,重新导入jar包呗,操作:项目——>右键——>properties——>Java bu

文件较验及Google Gson的使用

一,CRC32文件较验 文件校验可以确保文件内容不被篡改的方法,刚在工作中用到,记录下来. 1 private void doCheckSum(String fileName){ 2 try { 3 4 Log.d("checksum", fileName); 5 6 CheckedInputStream cis = null; 7 long fileSize = 0; 8 try { 9 // Computer CRC32 checksum 10 cis = new CheckedI

Multiple dex files define Lcom/google/gson/internal/Streams$AppendableWriter$CurrentWrite;

开发中引入第三方 aar 时编译同过,运行时出现问题: 说白了是个 gson jar包冲突造成的,用解压缩软件查看果真如此:谢特!!! 思路一: 在 app module下的build.gradle中加入: android{ repositories { flatDir { dirs 'libs' } } } 依赖时: compile(name: 'barcode_scanner_library_v2.3.2.0', ext: 'aar') { exclude group: 'com.googl