3

根据这个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

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

4

1 回答 1

6

当我将 Gson 与嵌套类一起使用时,我总是需要让它们static工作......在您的链接中,他们说这没有必要,但在Gson 文档中明确表示:

“Gson 也可以反序列化静态嵌套类。但是,Gson 不能自动反序列化纯内部类,因为它们的无参数构造函数还需要对包含对象的引用,而在反序列化时这是不可用的。您可以通过以下方式解决此问题要么使内部类成为静态的,要么为它提供一个自定义的 InstanceCreator。”


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

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

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

这应该可以工作,因为该类Tweet JSON 响应匹配。但是,然后您尝试使用 class 解析相同的 JSON 响应Coordinates,这显然与 JSON 响应不匹配……而且,两次解析相同的响应根本没有意义!

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

Tweet.Coordinates tweetCoordinates = tweet.getCordinates();

如果与类的解析Tweet也不起作用,请尝试制作内部类static,如果这也不起作用,请发表评论,我会尝试找到另一种解决方案......

于 2013-05-15T22:26:22.750 回答