首页 > 学院 > 开发设计 > 正文

Java 利用Gson解析Json数据 添加Gson源码jar包 查看GSON源码

2019-11-14 23:31:49
字体:
来源:转载
供稿:网友
java 利用Gson解析Json数据 添加Gson源码jar包 查看GSON源码

1.可以利用Android API中的JsonReader解析Json数据

2.可以引入Gson的jar包,结合JavaBean解析Json数据

Bean.java

package com.sphere.json;public class Bean {    /**     * Bean中的数据必须与Json数据中的key键值     * 一一对应  名字不可更改、     * name 与json的name键值对应     * wife 与json数据中的wife对应     * 否则会出现读取为null的现象     */    PRivate String name;    private String wife;        public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getWife() {        return wife;    }    public void setWife(String wife) {        this.wife = wife;    }        }
View Code

Gson解析工具类

package com.sphere.json;import java.io.IOException;import java.io.StringReader;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import com.google.gson.Gson;import com.google.gson.reflect.TypeToken;import com.google.gson.stream.JsonReader;public class JsonUtils {    /**     * 使用JsonReader     * @param data     */    public void parseJson(String data){        try {            //创建JsonReader对象            JsonReader reader = new JsonReader(new StringReader(data));            //开始解析数组            reader.beginArray();            while(reader.hasNext()){                //开始解析对象                reader.beginObject();                while(reader.hasNext()){                    //得到键                    String tagName = reader.nextName();                    if(tagName.equals("name")){                        System.out.print("name --->"+reader.nextString());                    }                    else if(tagName.equals("wife")){                        System.out.println("    wife --->"+reader.nextString());                    }                }                //解析对象结束                reader.endObject();            }            //解析数组结束            reader.endArray();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }        //解析json数组  返回list对象    public ArrayList<HashMap<String, String>> parseBeanFromJson(String jsonArray){                //Gson解析Json数组        Type type = new TypeToken<LinkedList<Bean>>(){}.getType();        Gson gson = new Gson();        LinkedList<Bean> beans = gson.fromJson(jsonArray, type);                        ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();        for (Iterator iterator = beans.iterator(); iterator.hasNext();) {            Bean bean = (Bean) iterator.next();            //System.out.print(bean.getName());            //System.out.println(bean.getWife());                        HashMap<String, String> map = new HashMap<String, String>();            map.put("name", bean.getName());            map.put("wife", bean.getWife());            /*添加到list中*/            list.add(map);        }                /*遍历list*/        int index = 0;        for (Iterator iterator = list.iterator(); iterator.hasNext();) {            HashMap<String, String> hashMap = (HashMap<String, String>) iterator.next();            System.out.println("list中第"+(++index)+"个元素"+hashMap);        }                return list;    }}

测试类Test.java

package com.sphere.json;import com.google.gson.Gson;public class Test {        static String jsonArray = "[{/"name/":/"张无忌/",/"wife/":/"敏敏特穆尔/"},{/"name/":/"杨过/",/"wife/":/"小龙女/"}]";        static String jsonData = "{/"name/":/"张无忌/",/"wife/":/"敏敏特穆尔/"}";            public static void main(String[] args) {        new JsonUtils().parseJson(jsonArray);        System.out.println();                /**********解析Json数据***********/        Gson gson = new Gson();        Bean user = gson.fromJson(jsonData, Bean.class);        System.out.println("我叫"+user.getName()+" 我妻子是"+user.getWife());        System.out.println();                /**********解析Json数组***********/        new JsonUtils().parseBeanFromJson(jsonArray);    }}

输出结果:

name --->张无忌    wife --->敏敏特穆尔name --->杨过    wife --->小龙女我叫张无忌 我妻子是敏敏特穆尔list中第1个元素{wife=敏敏特穆尔, name=张无忌}list中第2个元素{wife=小龙女, name=杨过}

假设我想跟踪代码查看某个gson中函数的具体实现,该如何添加对源码信息的查看呢。

其实很简单, 我们先下载gson-2.2.4-sources.jar这个jar包,将其拷贝到libs目录下。

我们在代码中使用ctrl + 左键 ,点击某个gson的API函数,如下,我们查看JsonReader这个函数

eclipse跳转到.class 页面

我们点击箭头所指的按钮attch source, 如下图:

因为我们把source.jar拷贝到了工程目录下 所以这里选择workspace

选中源码的jar

点击确定,就可以在eclipse中查看追踪gson的源码了。

//------------------------------------------------------------------------------------

  以下关于gson基本用法示例来自http://www.VEVb.com/kunpengit/p/4001680.html

//-------------------------------------------------------------------------------------

(3)bean转换json

Gson gson = new Gson();String json = gson.toJson(obj);obj是对象

(4)json转换bean

Gson gson = new Gson();

String json = "{/"id/":/"2/",/"name/":/"Json技术/"}";Book book = gson.fromJson(json, Book.class);

(5)json转换复杂的bean,比如List,Set将json转换成复杂类型的bean,需要使用TypeTokenGson gson = new Gson();String json = "[{/"id/":/"1/",/"name/":/"Json技术/"},{/"id/":/"2/",/"name/":/"java技术/"}]";//将json转换成ListList list = gson.fromJson(json,new TypeToken<LIST>() {}.getType());//将json转换成SetSet set = gson.fromJson(json,new TypeToken<SET>() {}.getType());

(6)通过json对象直接操作json以及一些json的工具a)格式化JsonString json = "[{/"id/":/"1/",/"name/":/"Json技术/"},{/"id/":/"2/",/"name/":/"java技术/"}]";Gson gson = new GsonBuilder().setPrettyPrinting().create();JsonParser jp = new JsonParser();JsonElement je = jp.parse(json);json = gson.toJson(je);b)判断字符串是否是json,通过捕捉的异常来判断是否是jsonString json = "[{/"id/":/"1/",/"name/":/"Json技术/"},{/"id/":/"2/",/"name/":/"java技术/"}]";boolean jsonFlag;try {new JsonParser().parse(str).getAsJsonObject();jsonFlag = true;} catch (Exception e) {jsonFlag = false;}

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

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

e)向json中添加属性String json = "{/"id/":/"1/",/"name/":/"Json技术/"}";String propertyName = 'desc';Object propertyValue = "json各种技术的调研";JsonParser jsonParser = new JsonParser();JsonElement element = jsonParser.parse(json);JsonObject jsonObj = element.getAsJsonObject();jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue));json = jsonObj.toString();

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

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

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();


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表