我在解析从 javascript 获取的 JSON 时遇到问题。 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
最后,我想遍历位置,为每个“位置”创建类,其中包含一个列表和另一个类 Position,它具有 int x、y。
感谢您的宝贵时间。
最佳答案
定义您的类,您将使用 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 时的错误是您尝试解析 String
中的复杂对象,这是不可能的。
关于java - 使用 gson 解析 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9853017/