2012-03-24 239 views
3

我在解析我從JavaScript獲得的JSON時遇到問題。 JSON格式是這樣的:用gson解析JSON數組

[{"positions":[{"x":50,"y":50},{"x":82,"y":50},{"x":114,"y":50},{"x":146,"y":50}]},{"positions":[{"x":210,"y":50},{"x":242,"y":50},{"x":274,"y":50}]}] 

到目前爲止,我已經能夠遠遠地得到這樣的:

{"positions":[{"x":50,"y":50},{"x":82,"y":50},{"x":114,"y":50},{"x":146,"y":50}]} 

,但我也需要現在創建一個類的職位。我一直在努力學習這門課,因爲我試着先打印輸出,但我無法進一步細分。我收到此錯誤消息:

java.lang.IllegalStateException:這不是JSON數組。

而且我的代碼是這樣的:

JsonParser parser = new JsonParser(); 
    String ships = request.getParameter("JSONships"); 
    JsonArray array = parser.parse(ships).getAsJsonArray(); 

    System.out.println(array.get(0).toString()); 
    JsonArray array2 = parser.parse(array.get(0).toString()).getAsJsonArray(); 
    System.out.println(array2.get(0).toString()); 

我也試圖做這種方式:

Gson gson = new Gson() ; 
    String lol = (gson.fromJson(array.get(0), String.class)); 
    System.out.println(lol); 

在這種情況下,我得到:

com.google.gson。 JsonSyntaxException:java.lang.IllegalStateException:期望的STRING,但是BEGIN_OBJECT

最後,iw ant來遍歷位置,爲每個「位置」創建類,其中包含帶有另一個具有int x,y的類位置的List。

謝謝你的時間。

回答

8

定義你的類,你會需要使用GSON得到的一切:

public class Class1 { 
    private int x; 
    private List<Class2> elements; 
} 

和內部類:

public class Class2 { 
    private String str1; 
    private Integer int2; 
} 

現在,您可以解析外部類就是這樣的一個JSON字符串:

gson.fromJson(jsonString, Class1.class); 

使用Gson時出現的錯誤是您嘗試解析中的複雜對象,這是不可能的。

+0

非常感謝。我從來沒有想過這會很容易,我甚至不知道我想用String來做什麼。你是我的英雄 – user1047833 2012-03-24 18:00:25

+0

嗨有可能解析一個複雜的JSON字符串在PHP中創建混合的dataTypes而不創建內部類。其實我們的API是用PHP編寫的,我們通過一個java應用程序來使用這個API。 – sumit 2015-02-23 12:59:39

+0

@sumit:你想如何使用JSON字符串?雖然JSON是PHP/javascript中的對象格式,你將如何訪問java中的屬性? – 2015-02-23 14:17:51