根据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
你能告诉我错误在哪里吗?
答案 0 :(得分:5)
当我将Gson与嵌套类一起使用时,我总是需要让它们static
才能工作......在你的链接中,他们说没有必要,但在Gson documentation中明确说:
“Gson也可以反序列化静态嵌套类。但是,Gson不能 因为它们没有args,所以自动反序列化纯内部类 构造函数还需要对包含Object的引用 在反序列化时不可用。你可以解决这个问题 通过使内部类静态或通过提供一个问题来解决问题 自定义InstanceCreator。“
无论如何,如果它实际上可以反序列化为非静态内部类,那么你的问题就是......
首先,您使用以下内容Tweet
解析JSON:
Tweet tweet = gson.fromJson(string, Tweet.class);
应该有效,因为类Tweet
匹配 JSON响应。但是,您尝试使用类Coordinates
解析相同的JSON响应,这显然不会匹配 JSON响应...此外,根本不需要解析同样的回应两次!
如果您的第一次解析确实有效,那么如果您想要访问Coordinates
对象,只需执行以下操作:
Tweet.Coordinates tweetCoordinates = tweet.getCordinates();
如果使用类Tweet
解析也不起作用,请尝试创建内部类static
,如果这也不起作用,请发表评论,我会尝试找到另一个溶液...