您的位置:首页 > 编程语言 > Java开发

JSON详细学习之Gson in JAVA

2017-07-17 21:51 501 查看
需要依赖的jar包: gson-2.2.4.jar

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

[java] view plain copy print?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));
}
}
}
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: