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

Java 使用Gson将JSON反序列化为非静态嵌套类,java,json,parsing,gson,Java,Json,Parsing,Gson,根据Gson可以反序列化到内部类。我有JSON字符串的下一个片段: ... "coordinates": { "coordinates": [106.80552006,-6.22016938], "type": "Point", } ... 我正在使用下一个类: public class Tweet { public Coordinates coordinates = new Coordinates(); public class Coordinates {

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

...
"coordinates": {
    "coordinates": [106.80552006,-6.22016938],
    "type": "Point",
}
...
我正在使用下一个类:

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

  public class Coordinates {
    public double[] coordinates;
  }
}
并尝试解析my 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还可以反序列化静态嵌套类。但是,Gson不能 自动反序列化纯内部类,因为它们没有参数 构造函数还需要对包含对象的引用,该对象是 反序列化时不可用。您可以解决此问题 通过使内部类保持静态或提供 它的自定义InstanceCreator。“


无论如何,如果实际上可以反序列化到非静态内部类,那么您的问题是

首先,您要用类
Tweet
解析JSON,方法是:

Tweet tweet = gson.fromJson(string, Tweet.class);
因为类
Tweet
与JSON响应匹配,所以它应该可以工作。但是,然后您试图用类
坐标
解析相同的JSON响应,这显然与JSON响应不匹配。。。而且,两次解析同一个响应根本没有意义

如果您的第一次解析确实有效,如果您想访问
坐标
对象,只需执行以下操作:

Tweet.Coordinates tweetCoordinates = tweet.getCordinates();

如果类
Tweet的解析也不起作用,请尝试将内部类
设置为静态的
,如果也不起作用,请发表评论,我将尝试找到另一个解决方案…

非常感谢!现在,即使使用非静态的内部类,一切都可以正常工作。