JSON详细学习之Gson in JAVA

需要依赖的jar包:  gson-2.2.4.jar

这里我也用到了前面介绍JSONObject时创建的model类,直接看代码吧

package com.peter.gson.test;

import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.peter.model.ClassInfo;
import com.peter.model.Student;
import com.peter.model.Teacher;

/**
 * Gson类:解析json的最基础的工具类 JsonParser类:解析器来解析JSON到JsonElements的解析树
 * JsonElement类:一个类代表的JSON元素 JsonObject类:JSON对象类型 JsonArray类:JsonObject数组
 * TypeToken类:用于创建type,比如泛型List<?>
 * 
 * @author Administrator
 * 
 */
public class Test {
	public static void main(String[] args) {

		Gson gson = new Gson();

		Student student1 = new Student();
		student1.setId(1);
		student1.setName("李坤");
		student1.setBirthDay(new Date());

		// //
		System.out.println("----------简单对象之间的转化-------------");
		// 简单的bean转为json
		String s1 = gson.toJson(student1);
		System.out.println("简单Bean转化为Json===" + s1);

		// json转为简单Bean
		Student student = gson.fromJson(s1, Student.class);
		System.out.println("Json转为简单Bean===" + student);
		// 结果:
		// 简单Bean转化为Json==={"id":1,"name":"李坤","birthDay":"Jun 22, 2012 8:27:52 AM"}
		// Json转为简单Bean===Student [birthDay=Fri Jun 22 08:27:52 CST 2012, id=1,
		// name=李坤]
		// //

		Student student2 = new Student();
		student2.setId(2);
		student2.setName("曹贵生");
		student2.setBirthDay(new Date());

		Student student3 = new Student();
		student3.setId(3);
		student3.setName("柳波");
		student3.setBirthDay(new Date());

		List<Student> list = new ArrayList<Student>();
		list.add(student1);
		list.add(student2);
		list.add(student3);

		System.out.println("----------带泛型的List之间的转化-------------");
		// 带泛型的list转化为json
		String s2 = gson.toJson(list);
		System.out.println("带泛型的list转化为json==" + s2);

		// json转为带泛型的list
		List<Student> retList = gson.fromJson(s2,
				new TypeToken<List<Student>>() {
				}.getType());
		for (Student stu : retList) {
			System.out.println(stu);
		}

		// 结果:
		// 带泛型的list转化为json==[{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 8:28:52 AM"},{"id":2,"name":"曹贵生","birthDay":"Jun 22, 2012 8:28:52 AM"},{"id":3,"name":"柳波","birthDay":"Jun 22, 2012 8:28:52 AM"}]
		// Student [birthDay=Fri Jun 22 08:28:52 CST 2012, id=1, name=李坤]
		// Student [birthDay=Fri Jun 22 08:28:52 CST 2012, id=2, name=曹贵生]
		// Student [birthDay=Fri Jun 22 08:28:52 CST 2012, id=3, name=柳波]

		Teacher t = new Teacher();
		t.setJabNum("t101");
		t.setName("lijun");
		ClassInfo ci = new ClassInfo();
		ci.setClassName("cna");
		ci.setClassNum(101);
		ci.setStudents(list);
		ci.setTeacher(t);
		String c = gson.toJson(ci);
		System.out.println("ci to json  //");
		System.out.println(c);
		System.out.println("json to ci //");
		ClassInfo cijson = gson.fromJson(c, ClassInfo.class);
		System.out.println(cijson);

		System.out.println("handle date json//");
		String jsonDateStr = "{\"id\":1,\"name\":\"peter\",\"birthDay\":\"2013-01-04 10:30:30\"}";
		gson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss").create();
		Student stu = gson.fromJson(jsonDateStr, Student.class);
		System.out.println(stu);

		Gson dategson = new GsonBuilder().setDateFormat("yyyy-MM-dd HH:mm:ss")
				.create();
		String jsonString = dategson.toJson(
				new Date(System.currentTimeMillis()), Date.class);
		System.out.println(System.currentTimeMillis());
		System.out.println(jsonString);

		// (6)通过json对象直接操作json以及一些json的工具
		// a)格式化Json
		String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]";
		Gson pregson = new GsonBuilder().setPrettyPrinting().create();
		JsonParser jp = new JsonParser();
		JsonElement je = jp.parse(json);
		json = pregson.toJson(je);
		System.out.println("格式化Json:" + json);

		// b)判断字符串是否是json,通过捕捉的异常来判断是否是json
		String comjson = "{\"id\":\"1\",\"name\":\"Json技术\"}";
		boolean jsonFlag = false;
		try {
			new JsonParser().parse(comjson).getAsJsonObject();
			jsonFlag = true;
		} catch (Exception e) {
			jsonFlag = false;
		}
		System.out.println("判断字符串是否是json:" + jsonFlag);

		// c)从json串中获取属性
		String prejson = "{\"id\":\"1\",\"name\":\"Json技术\"}";
		String propertyName = "id";
		String propertyValue = "";
		try {
			JsonParser jsonParser = new JsonParser();
			JsonElement element = jsonParser.parse(prejson);
			JsonObject jsonObj = element.getAsJsonObject();
			propertyValue = jsonObj.get(propertyName).getAsString();
		} catch (Exception e) {
			propertyValue = null;
		}
		System.out.println("从json串中获取属性:" + propertyValue);

		// d)除去json中的某个属性
		String json1 = "{\"id\":\"1\",\"name\":\"Json技术\"}";
		String propertyName1 = "id";
		JsonParser jsonParser = new JsonParser();
		JsonElement element = jsonParser.parse(json1);
		JsonObject jsonObj = element.getAsJsonObject();
		jsonObj.remove(propertyName1);
		json1 = jsonObj.toString();
		System.out.println("除去json中的某个属性:" + json1);

		// e)向json中添加属性
		String json2 = "{\"id\":\"1\",\"name\":\"Json技术\"}";
		String propertyName2 = "desc";
		Object propertyValue2 = "json各种技术的调研";
		JsonParser jsonParser2 = new JsonParser();
		JsonElement element2 = jsonParser2.parse(json2);
		JsonObject jsonObj2 = element2.getAsJsonObject();
		jsonObj2.addProperty(propertyName2, new Gson().toJson(propertyValue2));
		json2 = jsonObj2.toString();
		System.out.println("向json中添加属性:" + json2);

		// f)修改json中的属性
		json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
		propertyName = "name";
		propertyValue = "json各种技术的调研";
		jsonParser = new JsonParser();
		element = jsonParser.parse(json);
		jsonObj = element.getAsJsonObject();
		jsonObj.remove(propertyName);
		jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));
		json = jsonObj.toString();
		System.out.println("修改json中的属性:" + json);

		// g)判断json中是否有属性
		json = "{\"id\":\"1\",\"name\":\"Json技术\"}";
		propertyName = "name";
		boolean isContains = false;
		jsonParser = new JsonParser();
		element = jsonParser.parse(json);
		jsonObj = element.getAsJsonObject();
		isContains = jsonObj.has(propertyName);
		System.out.println("判断json中是否有属性:" + isContains);

		// // h)json中日期格式的处理
		// GsonBuilder builder = new GsonBuilder();
		// builder.setDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
		// Gson gson = builder.create();
		// // 然后使用gson对象进行json的处理,如果出现日期Date类的对象,就会按照设置的格式进行处理
		// // i)json中对于Html的转义
		// Gson gson = new Gson();
		// // 这种对象默认对Html进行转义,如果不想转义使用下面的方法
		// GsonBuilder builder = new GsonBuilder();
		// builder.disableHtmlEscaping();
		// Gson gson = builder.create();

		// map <--> json
		Map<String, String> colours = new HashMap<String, String>();
		colours.put("BLACK", "#000000");
		colours.put("RED", "#FF0000");
		colours.put("GREEN", "#008000");
		colours.put("BLUE", "#0000FF");
		colours.put("YELLOW", "#FFFF00");
		colours.put("WHITE", "#FFFFFF");

		//
		// Convert a Map into JSON string.
		//
		gson = new Gson();
		String jsonMap = gson.toJson(colours);
		System.out.println("json = " + jsonMap);

		//
		// Convert JSON string back to Map.
		//
		Type type = new TypeToken<Map<String, String>>() {
		}.getType();
		Map<String, String> map = gson.fromJson(jsonMap, type);
		for (String key : map.keySet()) {
			System.out.println("map.get = " + map.get(key));
		}
	}
}

运行结果请自行测试学习。

在此,关于Json的学习告一段落.

工程地址: http://download.csdn.net/detail/linpe/9558729

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值