JSON详细学习之Gson in JAVA

来源:互联网 发布:免费下载绘图软件 编辑:程序博客网 时间:2024/06/02 02:38

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

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

[java] view plain copy
print?
  1. package com.peter.gson.test;  
  2.   
  3. import java.lang.reflect.Type;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.HashMap;  
  7. import java.util.List;  
  8. import java.util.Map;  
  9.   
  10. import com.google.gson.Gson;  
  11. import com.google.gson.GsonBuilder;  
  12. import com.google.gson.JsonElement;  
  13. import com.google.gson.JsonObject;  
  14. import com.google.gson.JsonParser;  
  15. import com.google.gson.reflect.TypeToken;  
  16. import com.peter.model.ClassInfo;  
  17. import com.peter.model.Student;  
  18. import com.peter.model.Teacher;  
  19.   
  20. /** 
  21.  * Gson类:解析json的最基础的工具类 JsonParser类:解析器来解析JSON到JsonElements的解析树 
  22.  * JsonElement类:一个类代表的JSON元素 JsonObject类:JSON对象类型 JsonArray类:JsonObject数组 
  23.  * TypeToken类:用于创建type,比如泛型List<?> 
  24.  *  
  25.  * @author Administrator 
  26.  *  
  27.  */  
  28. public class Test {  
  29.     public static void main(String[] args) {  
  30.   
  31.         Gson gson = new Gson();  
  32.   
  33.         Student student1 = new Student();  
  34.         student1.setId(1);  
  35.         student1.setName(”李坤”);  
  36.         student1.setBirthDay(new Date());  
  37.   
  38.         // //////////////////////////////////////////////////////////  
  39.         System.out.println(”———-简单对象之间的转化————-“);  
  40.         // 简单的bean转为json  
  41.         String s1 = gson.toJson(student1);  
  42.         System.out.println(”简单Bean转化为Json===” + s1);  
  43.   
  44.         // json转为简单Bean  
  45.         Student student = gson.fromJson(s1, Student.class);  
  46.         System.out.println(”Json转为简单Bean===” + student);  
  47.         // 结果:  
  48.         // 简单Bean转化为Json==={“id”:1,”name”:”李坤”,”birthDay”:”Jun 22, 2012 8:27:52 AM”}  
  49.         // Json转为简单Bean===Student [birthDay=Fri Jun 22 08:27:52 CST 2012, id=1,  
  50.         // name=李坤]  
  51.         // //////////////////////////////////////////////////////////  
  52.   
  53.         Student student2 = new Student();  
  54.         student2.setId(2);  
  55.         student2.setName(”曹贵生”);  
  56.         student2.setBirthDay(new Date());  
  57.   
  58.         Student student3 = new Student();  
  59.         student3.setId(3);  
  60.         student3.setName(”柳波”);  
  61.         student3.setBirthDay(new Date());  
  62.   
  63.         List<Student> list = new ArrayList<Student>();  
  64.         list.add(student1);  
  65.         list.add(student2);  
  66.         list.add(student3);  
  67.   
  68.         System.out.println(”———-带泛型的List之间的转化————-“);  
  69.         // 带泛型的list转化为json  
  70.         String s2 = gson.toJson(list);  
  71.         System.out.println(”带泛型的list转化为json==” + s2);  
  72.   
  73.         // json转为带泛型的list  
  74.         List<Student> retList = gson.fromJson(s2,  
  75.                 new TypeToken<List<Student>>() {  
  76.                 }.getType());  
  77.         for (Student stu : retList) {  
  78.             System.out.println(stu);  
  79.         }  
  80.   
  81.         // 结果:  
  82.         // 带泛型的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”}]  
  83.         // Student [birthDay=Fri Jun 22 08:28:52 CST 2012, id=1, name=李坤]  
  84.         // Student [birthDay=Fri Jun 22 08:28:52 CST 2012, id=2, name=曹贵生]  
  85.         // Student [birthDay=Fri Jun 22 08:28:52 CST 2012, id=3, name=柳波]  
  86.   
  87.         Teacher t = new Teacher();  
  88.         t.setJabNum(”t101”);  
  89.         t.setName(”lijun”);  
  90.         ClassInfo ci = new ClassInfo();  
  91.         ci.setClassName(”cna”);  
  92.         ci.setClassNum(101);  
  93.         ci.setStudents(list);  
  94.         ci.setTeacher(t);  
  95.         String c = gson.toJson(ci);  
  96.         System.out.println(”ci to json  //////////////”);  
  97.         System.out.println(c);  
  98.         System.out.println(”json to ci //////////”);  
  99.         ClassInfo cijson = gson.fromJson(c, ClassInfo.class);  
  100.         System.out.println(cijson);  
  101.   
  102.         System.out.println(”handle date json//////////////////////////”);  
  103.         String jsonDateStr = ”{\”id\”:1,\”name\”:\”peter\”,\”birthDay\”:\”2013-01-04 10:30:30\”}”;  
  104.         gson = new GsonBuilder().setDateFormat(“yyyy-MM-dd HH:mm:ss”).create();  
  105.         Student stu = gson.fromJson(jsonDateStr, Student.class);  
  106.         System.out.println(stu);  
  107.   
  108.         Gson dategson = new GsonBuilder().setDateFormat(“yyyy-MM-dd HH:mm:ss”)  
  109.                 .create();  
  110.         String jsonString = dategson.toJson(  
  111.                 new Date(System.currentTimeMillis()), Date.class);  
  112.         System.out.println(System.currentTimeMillis());  
  113.         System.out.println(jsonString);  
  114.   
  115.         // (6)通过json对象直接操作json以及一些json的工具  
  116.         // a)格式化Json  
  117.         String json = ”[{\”id\”:\”1\”,\”name\”:\”Json技术\”},{\”id\”:\”2\”,\”name\”:\”java技术\”}]”;  
  118.         Gson pregson = new GsonBuilder().setPrettyPrinting().create();  
  119.         JsonParser jp = new JsonParser();  
  120.         JsonElement je = jp.parse(json);  
  121.         json = pregson.toJson(je);  
  122.         System.out.println(”格式化Json:” + json);  
  123.   
  124.         // b)判断字符串是否是json,通过捕捉的异常来判断是否是json  
  125.         String comjson = ”{\”id\”:\”1\”,\”name\”:\”Json技术\”}”;  
  126.         boolean jsonFlag = false;  
  127.         try {  
  128.             new JsonParser().parse(comjson).getAsJsonObject();  
  129.             jsonFlag = true;  
  130.         } catch (Exception e) {  
  131.             jsonFlag = false;  
  132.         }  
  133.         System.out.println(”判断字符串是否是json:” + jsonFlag);  
  134.   
  135.         // c)从json串中获取属性  
  136.         String prejson = ”{\”id\”:\”1\”,\”name\”:\”Json技术\”}”;  
  137.         String propertyName = ”id”;  
  138.         String propertyValue = ”“;  
  139.         try {  
  140.             JsonParser jsonParser = new JsonParser();  
  141.             JsonElement element = jsonParser.parse(prejson);  
  142.             JsonObject jsonObj = element.getAsJsonObject();  
  143.             propertyValue = jsonObj.get(propertyName).getAsString();  
  144.         } catch (Exception e) {  
  145.             propertyValue = null;  
  146.         }  
  147.         System.out.println(”从json串中获取属性:” + propertyValue);  
  148.   
  149.         // d)除去json中的某个属性  
  150.         String json1 = ”{\”id\”:\”1\”,\”name\”:\”Json技术\”}”;  
  151.         String propertyName1 = ”id”;  
  152.         JsonParser jsonParser = new JsonParser();  
  153.         JsonElement element = jsonParser.parse(json1);  
  154.         JsonObject jsonObj = element.getAsJsonObject();  
  155.         jsonObj.remove(propertyName1);  
  156.         json1 = jsonObj.toString();  
  157.         System.out.println(”除去json中的某个属性:” + json1);  
  158.   
  159.         // e)向json中添加属性  
  160.         String json2 = ”{\”id\”:\”1\”,\”name\”:\”Json技术\”}”;  
  161.         String propertyName2 = ”desc”;  
  162.         Object propertyValue2 = ”json各种技术的调研”;  
  163.         JsonParser jsonParser2 = new JsonParser();  
  164.         JsonElement element2 = jsonParser2.parse(json2);  
  165.         JsonObject jsonObj2 = element2.getAsJsonObject();  
  166.         jsonObj2.addProperty(propertyName2, new Gson().toJson(propertyValue2));  
  167.         json2 = jsonObj2.toString();  
  168.         System.out.println(”向json中添加属性:” + json2);  
  169.   
  170.         // f)修改json中的属性  
  171.         json = ”{\”id\”:\”1\”,\”name\”:\”Json技术\”}”;  
  172.         propertyName = ”name”;  
  173.         propertyValue = ”json各种技术的调研”;  
  174.         jsonParser = new JsonParser();  
  175.         element = jsonParser.parse(json);  
  176.         jsonObj = element.getAsJsonObject();  
  177.         jsonObj.remove(propertyName);  
  178.         jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));  
  179.         json = jsonObj.toString();  
  180.         System.out.println(”修改json中的属性:” + json);  
  181.   
  182.         // g)判断json中是否有属性  
  183.         json = ”{\”id\”:\”1\”,\”name\”:\”Json技术\”}”;  
  184.         propertyName = ”name”;  
  185.         boolean isContains = false;  
  186.         jsonParser = new JsonParser();  
  187.         element = jsonParser.parse(json);  
  188.         jsonObj = element.getAsJsonObject();  
  189.         isContains = jsonObj.has(propertyName);  
  190.         System.out.println(”判断json中是否有属性:” + isContains);  
  191.   
  192.         // // h)json中日期格式的处理  
  193.         // GsonBuilder builder = new GsonBuilder();  
  194.         // builder.setDateFormat(“yyyy-MM-dd HH:mm:ss.SSS”);  
  195.         // Gson gson = builder.create();  
  196.         // // 然后使用gson对象进行json的处理,如果出现日期Date类的对象,就会按照设置的格式进行处理  
  197.         // // i)json中对于Html的转义  
  198.         // Gson gson = new Gson();  
  199.         // // 这种对象默认对Html进行转义,如果不想转义使用下面的方法  
  200.         // GsonBuilder builder = new GsonBuilder();  
  201.         // builder.disableHtmlEscaping();  
  202.         // Gson gson = builder.create();  
  203.   
  204.         // map <–> json  
  205.         Map<String, String> colours = new HashMap<String, String>();  
  206.         colours.put(”BLACK”“#000000”);  
  207.         colours.put(”RED”“#FF0000”);  
  208.         colours.put(”GREEN”“#008000”);  
  209.         colours.put(”BLUE”“#0000FF”);  
  210.         colours.put(”YELLOW”“#FFFF00”);  
  211.         colours.put(”WHITE”“#FFFFFF”);  
  212.   
  213.         //  
  214.         // Convert a Map into JSON string.  
  215.         //  
  216.         gson = new Gson();  
  217.         String jsonMap = gson.toJson(colours);  
  218.         System.out.println(”json = ” + jsonMap);  
  219.   
  220.         //  
  221.         // Convert JSON string back to Map.  
  222.         //  
  223.         Type type = new TypeToken<Map<String, String>>() {  
  224.         }.getType();  
  225.         Map<String, String> map = gson.fromJson(jsonMap, type);  
  226.         for (String key : map.keySet()) {  
  227.             System.out.println(”map.get = ” + map.get(key));  
  228.         }  
  229.     }  
  230. }  
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

原创粉丝点击