2011-05-25 39 views
0

我有一個數據結構如下如何正確解析使用GSON的這個json字符串。 JsonObject返回空,沒有解析錯誤

{「testString」:「一些字符串」,「成功」:真,「原因」:空,「數據」:{「網絡「:[{」networkId「:」1「,」networkName「:」some area「,」networkType「:1},{」networkId「:」4「,」networkName「:」another place「,」networkType「 1}]}}

因此,基本上它是與第一你鍵/值對是一個1)字符串2)布爾3)字符串和第四陣列對象被一個JSONObject

的Object我使用作爲所有這些數據的容器是

public class ContainerData { 


private boolean success; 
private String reason; 

private JSONObject data; 

private String testString; 

public String getTestString(){ 
    return this.testString; 
} 
public void setTestString(String test){ 
    this.testString = test; 
} 

public boolean getSuccess() { 
    return this.success; 
} 

public void setSuccess(boolean success) { 
    this.success = success; 
} 

public String getReason() { 
    return this.reason; 
} 

public void setReason(String reason) { 
    this.reason = reason; 
} 

public JSONObject getData() { 
    return this.data; 
} 

public void setData(JSONObject data) { 
    this.data = data; 
} 
} 

我解析它像這樣withr esponse對象是JSON字符串

Gson gson = new GsonBuilder().serializeNulls().create(); 
    responseObject = gson.fromJson(response,ContainerData.class); 

我能值以外的所有的JSONObject它總是返回在那裏我搞亂了一個空數組如{}任何想法?

+0

爲什麼使用JSONObject而不是反序列化爲友好的結構?爲什麼使用JSONObject而不是com.google.gson.JsonObject? – 2011-05-31 11:01:43

回答

2

下面是一個與您提供的JSON輸入一起工作的方法,但更「完全」反序列化成友好的數據結構。

輸出是

[ContainerData: success=true, reason=null, testString=some string, data=[Data: networks=[ 
[Network: networkId=1, networkName=some area, networkType=1], 
[Network: networkId=4, networkName=another place, networkType=1] 
]]]
public class Foo 
{ 
    static String jsonInput = 
    "{" + 
     "\"testString\":\"some string\"," + 
     "\"success\":true," + 
     "\"reason\":null," + 
     "\"data\":" + 
     "{" + 
     "\"networks\":" + 
     "[" + 
      "{\"networkId\":\"1\",\"networkName\":\"some area\",\"networkType\":1}," + 
      "{\"networkId\":\"4\",\"networkName\":\"another place\",\"networkType\":1}" + 
     "]" + 
     "}" + 
    "}"; 

    public static void main(String[] args) 
    { 
    GsonBuilder gsonBuilder = new GsonBuilder(); 
    Gson gson = gsonBuilder.create(); 
    ContainerData container = gson.fromJson(jsonInput, ContainerData.class); 
    System.out.println(container); 
    } 
} 

class ContainerData 
{ 
    private boolean success; 
    private String reason; 
    private String testString; 
    private Data data; 

    @Override 
    public String toString() 
    { 
    return String.format(
     "[ContainerData: success=%1$b, reason=%2$s, testString=%3$s, data=%4$s]", 
     success, reason, testString, data); 
    } 
} 

class Data 
{ 
    private Network[] networks; 

    @Override 
    public String toString() 
    { 
    return String.format(
     "[Data: networks=%1$s]", 
     Arrays.toString(networks)); 
    } 
} 

class Network 
{ 
    private String networkId; 
    private String networkName; 
    private int networkType; 

    @Override 
    public String toString() 
    { 
    return String.format(
     "[Network: networkId=%1$s, networkName=%2$s, networkType=%3$d]", 
     networkId, networkName, networkType); 
    } 
} 
+0

謝謝,我使用了類似的解決方案 – Brian 2011-06-01 06:19:17

2

我已經解析了你上面提到的JSON字符串。它沒有使用GSON來解析JSON。請嘗試這一點。我認爲它會解決您的問題:

String jsonString = "{\"testString\":\"some string\",\"success\":true,\"reason\":null,\"data\":{\"networks\":[{\"networkId\":\"1\",\"networkName\":\"some area\",\"networkType\":1},{\"networkId\":\"4\",\"networkName\":\"another place\",\"networkType\":1}]}}"; 

       JSONObject jObject = new JSONObject(jsonString); 

       String menuObject = jObject.getString("testString"); 
       System.out.println("testString="+menuObject); 

       String menuObject1 = jObject.getString("success"); 
       System.out.println("success="+menuObject1); 

       String menuObject2 = jObject.getString("reason"); 
       System.out.println("reason="+menuObject2); 

       String menuObject3 = jObject.getString("data"); 
       System.out.println("data="+menuObject3); 

       JSONObject popupObject = jObject.getJSONObject("data"); 

       JSONArray jObject1 = popupObject.getJSONArray("networks"); 
       for (int i = 0; i < 2; i++) { 
        System.out.println("networkId of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkId").toString()); 
        System.out.println("networkName of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkName").toString()); 
        System.out.println("networkType of"+" "+i+" th element= "+jObject1.getJSONObject(i).getString("networkType").toString()); 

       } 
+0

謝謝,這兩個答案給了我如何實施解決方案的想法。 – Brian 2011-06-01 06:19:48