Java 使用Gson将JSON反序列化为非静态嵌套类
根据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 {
...
"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的解析也不起作用,请尝试将内部类设置为静态的,如果也不起作用,请发表评论,我将尝试找到另一个解决方案…非常感谢!现在,即使使用非静态的内部类,一切都可以正常工作。