1. 程式人生 > >Gson解析複雜JSON字串的兩種方式

Gson解析複雜JSON字串的兩種方式

JSONObject(源自Android官方)、
Gson(源自Google)、
Jackson(第三方開源庫)、
FastJSON(第三方開源庫)、

本文例子使用Google提供的Gson。

什麼是JavaBean

JavaBean實際上是一種特殊的Java類,是一種規範,經常用於封裝資料。JavaBean遵循如下程式設計原則:

1、必須有一個public無參建構函式;
2、所有屬性私有化private;
3、私有化的屬性必須通過public的getter和setter暴露,且方法命名需要遵循getXXX(XXX首字母需要大寫,故屬性名稱前兩個字母大小寫必須一致,避免混淆)、setXXX規則。
4、可序列化,即實現java.io.serializable介面,用於實現Bean的持久化。

方法一:JavaBean定義Json結構

步驟1:根據Json結構定義相應封裝類,類的屬性(即屬性名稱)必須與Json結構的key一一對應。
步驟2:直接把JSON字串解析成步驟1的類

JavaBean定義:

class Body{
    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public RequestData getRequestData() {
        return requestData;
    }

    public void setRequestData(RequestData requestData) {
        this.requestData = requestData;
    }

    private String url;

    private RequestData requestData;
}

class RequestData{
    private String ex;

    public String getEx() {
        return ex;
    }

    public void setEx(String ex) {
        this.ex = ex;
    }
}

json解析:

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

//具體解析程式碼
Gson gson = new Gson();
Body bodyObj= gson.fromJson(body,Body.class);
System.out.println("===="+bodyObj.getUrl());
System.out.println("===="+bodyObj.getRequestData().getEx());

方式二:直接解析最外層Json

樓主的json字串是一個複雜物件,只需要解析出外層的URL和reqData物件,再進行轉發,實際並不關心reqData具體結構,故實際採取這種方式。
JsonParser可以將json字串解析轉換為JsonObject, JsonObject可以通過get(key).getAsJsonObject(),直接解析JsonObject、string、int等.

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;

//具體解析程式碼
String body = "{\"requestData\":{\"ex\":\"ext\"},\"url\":\"456\"}";
JsonParser parser = new JsonParser();
JsonObject jsonObject  = parser.parse(body).getAsJsonObject();
JsonObject s = jsonObject.get("requestData").getAsJsonObject();
System.out.println("=====" + s.toString());

更多專業前端知識,請上 【猿204