当前位置: 首页 > 面试题库 >

用gson解析JSON数组

宰坚
2023-03-14
问题内容

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

最后,我要遍历职位,为每个“职位”创建一个类,其中包含一个List,另一个List的类具有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,而这是不可能的。



 类似资料:
  • 问题内容: 但是我无法从中得到答案。上面链接的答案: 它运作良好,但我想对泛型使用隐式运算符。见下文: 然后,我尝试将Class参数传递给方法: 然后出现一个错误: 谁能告诉我为什么会出现此错误?TypeToken类不支持隐式运算​​符吗? 问题答案: 您可以这样:

  • 问题内容: 我有一个像这样的JSON文件: 在文件具有根元素之前,我将使用: 代码,但我不认为如何将类编码为根元素是一个数组。 我试过使用: 与: 但是还没有运气。使用这种方法我还能怎么读呢? PS我有这个工作使用: 但是我更想知道如何使用这两种方法(如果可能)。 问题答案: 问题是由放置在数组中的JSON对象(在 每种 情况下)的末尾逗号引起的: 如果删除它们,您的数据将成为 和 应该工作正常。

  • 附言:我用这个来工作: 但我更希望知道如何做到这一点(如果可能的话)与这两种方法。

  • 如何使用GSON解析这个json? 我的代码: 我的stacktrace com.google.gson.JsonSyn出租车异常:java.lang.IllegalStateExctive:预期BEGIN_OBJECT但BEGIN_ARRAY在第1行第2列路径$com.google.gson.internal.bind.ReflecteTypeAdapterFactory$Adapter.rea

  • 问题内容: 我有这个json数组: 我有这个类来保存数据: 我正在尝试将json转换为MapData对象的列表: 但是我得到这个错误: 我究竟做错了什么? 问题答案: 我怀疑方法调用返回错误的类型。它应该返回而不是。 就像是: 在这个要点中,我有一个很好的例子说明了您的问题