2012-03-24 139 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