java - 使用 gson 解析 JSON 数组

标签 java json gson arrays

我在解析从 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/

相关文章:

java - json 的模型类

java - SQL 语法中的 JDBC 问号

java - Spring Cloud Gateway 和容错

java - SQL更新语句不改变记录

javascript - 文本未在 d3 可视化中呈现

java - GSON将json值反序列化为Java对象

scala - 如何在 Scala 中使用 Gson 来序列化列表?

java - 无法通过@PathVariable绑定(bind)到Mono<String>?

json - 将来自多个单元格的数据合并到一个 JSON 对象中

javascript - 在 JavaScript 中将文本转换为日期/时间对象