java – 使用Gson将JSON反序列化为非静态嵌套类

根据this,Gson可以反序列化为内部类.我有JSON字符串的下一个片段:

...
"coordinates": {
    "coordinates": [106.80552006,-6.22016938],
    "type": "Point",
}
...

我正在使用下一堂课:

public class Tweet {
  public Coordinates coordinates = new Coordinates();

  public class Coordinates {
    public double[] coordinates;
  }
}

并尝试解析我的JSON字符串:

Tweet tweet = gson.fromJson(string, Tweet.class);
Tweet.Coordinates tweetCoordinates = gson.fromJson(string, Tweet.Coordinates.class);

但我得到这个错误:

Expected BEGIN_ARRAY but was BEGIN_OBJECT

你能告诉我错误在哪里吗?

最佳答案
当我使用Gson和嵌套类时,我总是需要让它们静态工作…在你的链接中他们说这不是必要的,但在Gson documentation中它清楚地说:

“Gson can also deserialize static nested classes. However, Gson can not
automatically deserialize the pure inner classes since their no-args
constructor also need a reference to the containing Object which is
not available at the time of deserialization. You can address this
problem by either making the inner class static or by providing a
custom InstanceCreator for it.”

无论如何,如果它实际上可以反序列化为非静态内部类,那么你的问题就是……

首先,您使用类Tweet解析JSON:

Tweet tweet = gson.fromJson(string, Tweet.class);

这应该是有效的,因为类Tweet匹配JSON响应.但是,那么你试图用类Coordinates解析相同的JSON响应,这显然与JSON响应不匹配…而且完全解析相同的响应两次是没有意义的!

如果您的第一次解析实际上正在工作,那么如果您想要访问Coordinates对象,只需执行以下操作:

Tweet.Coordinates tweetCoordinates = tweet.getCordinates();

如果使用类Tweet解析也不起作用,请尝试使内部类静态,如果这也不起作用,请发表评论,我会尝试找到另一种解决方案……

转载注明原文:java – 使用Gson将JSON反序列化为非静态嵌套类 - 代码日志