使用Gson解析JSON格式數據

用於處理JSON數據的工具有很多,搜的時候看到了Gson,所以就選擇了這個,就是這麼草率。

但是昨天要解析下面的json字符串,說白了我只是想要把data字段裏面的東西都轉成java對象,結果在網上搜了半天,找到的博客不是解析這種{"name":"xxx", "age":"19"}類型的,就是解析[{"name":"xxx", "age":"19"}]這種類型的,我要這種有何用???

{
    "data": [
        {
            "createTime": "2018-11-05 14:12:39",
            "groupDesc": "組1",
            "groupKey": "group-test",
            "id": "c14da77a-600d-4773-a94e-2fc337e72414",
            "status": 1,
            "systemKey": "AA",
            "updateTime": "2018-11-05 14:12:38"
        }
    ],
    "message": "success",
    "status": "0"
}

不過,經過我堅持不懈的努力,最終還是解決了這個問題。Maven項目,直接在pom中添加依賴:

	<dependency>
		<groupId>com.google.code.gson</groupId>
		<artifactId>gson</artifactId>
		<version>2.8.5</version>
	</dependency>

以下代碼都是可以直接運行的,此處使用了unit的Test,可以在pom裏面添加unit依賴:

	<dependency>
		<groupId>junit</groupId>
		<artifactId>junit</artifactId>
		 <version>4.9</version>
	</dependency>

下面是測試代碼,詳細說明都在註釋裏面:

	@Test
    public void gsonTest() {
        String simpleStr = "{\"name\":\"Sunny\",\"age\":19}";
        String arraySimpleStr = "[{\"name\":\"Sunny\",\"age\":19}]";
        String response = "{\"data\":[{" +
                                        " \"createTime\": \"2018-11-05 14:12:39\"," +
                                        "\"groupDesc\": \"組1\"," +
                                        "\"groupKey\": \"group-test\"," +
                                        "\"id\": \"c14da77a-600d-4773-a94e-2fc337e72414\"," +
                                        "\"status\": 1," +
                                        "\"systemKey\": \"AA\"," +
                                        "\"updateTime\": \"2018-11-05 14:12:38\"" +
                                        "}]," +
                            "\"message\": \"success\"," +
                            "\"status\": \"0\"" + "}";

        Gson gson = new Gson();

        // 調用fromJson方法直接對json字符串進行轉換,傳入json字符串,指定要轉換成哪種類型的對象
        SimplePojo simplePojo = gson.fromJson(simpleStr, SimplePojo.class);
        System.out.println("SimpleStr result : " + simplePojo.toString());

        // 對於解析數據有兩種方式,此處因爲數據裏只有一條數據,就不遍歷輸出了
        // 1. 指定轉換後的對象爲數組的形式SimplePojo[].class
        SimplePojo[] arraySimplePojos = gson.fromJson(arraySimpleStr, SimplePojo[].class);
        System.out.println("arraySimpleStr result : " + arraySimplePojos[0].toString());

        // 2. 通過解析器直接轉換成數組
        // 定義一個解析器
        JsonParser parser = new JsonParser();
        JsonArray arraySimplePojos2 = parser.parse(arraySimpleStr).getAsJsonArray();
        System.out.println("arraySimpleStr result2 : " + arraySimplePojos2.get(0).toString());

        // 解析複雜類型的json字符串, list用於存放解析data數組生成的對象
        ArrayList<GroupResponse> list = new ArrayList<GroupResponse>();
        // 將數據先解析成JsonObject類型的對象
        JsonObject object = parser.parse(response).getAsJsonObject();
        // 通過字段名稱獲取到指定字段的數據, 此處可以看出data字段裏是一個數組, 所以返回的是JsonArray類型的
        JsonArray array = object.get("data").getAsJsonArray();
        for (JsonElement element : array) {
            // 遍歷取出數組裏的每個element, 此處就跟把一個把簡單json字符串轉成對象一樣了
            GroupResponse groupResponse = gson.fromJson(element, GroupResponse.class);
            list.add(groupResponse);
        }
        System.out.println("Response result : " + list.toString());
    }

輸出結果:
SimpleStr result : SimplePojo{name='Sunny', age=19}
arraySimpleStr result : SimplePojo{name='Sunny', age=19}
arraySimpleStr result2 : {"name":"Sunny","age":19}
Response result : [GroupResponse{createTime='2018-11-05 14:12:39', groupDesc='組1', groupKey='group-test', id='c14da77a-600d-4773-a94e-2fc337e72414', status=1, systemKey='AA', updateTime='2018-11-05 14:12:38'}]

關於Gson的使用,先寫這麼多吧,裏面還有很多強大的功能,項目比較緊張,其他功能後面再補充吧。

Emmm… 似乎還需要貼出來pojo類?

/**
 * @author Peerless galaxy.
 * @date 2018/11/6 10:59
 */
public class SimplePojo {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "SimplePojo{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
/**
 * @author Peerless galaxy.
 * @date 2018/11/6 11:07
 */
public class GroupResponse {
    String createTime;
    String groupDesc;
    String groupKey;
    String id;
    int status;
    String systemKey;
    String updateTime;

    public String getCreateTime() {
        return createTime;
    }

    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }

    public String getGroupDesc() {
        return groupDesc;
    }

    public void setGroupDesc(String groupDesc) {
        this.groupDesc = groupDesc;
    }

    public String getGroupKey() {
        return groupKey;
    }

    public void setGroupKey(String groupKey) {
        this.groupKey = groupKey;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getSystemKey() {
        return systemKey;
    }

    public void setSystemKey(String systemKey) {
        this.systemKey = systemKey;
    }

    public String getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(String updateTime) {
        this.updateTime = updateTime;
    }

    @Override
    public String toString() {
        return "GroupResponse{" +
                "createTime='" + createTime + '\'' +
                ", groupDesc='" + groupDesc + '\'' +
                ", groupKey='" + groupKey + '\'' +
                ", id='" + id + '\'' +
                ", status=" + status +
                ", systemKey='" + systemKey + '\'' +
                ", updateTime='" + updateTime + '\'' +
                '}';
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章