【发布时间】:2014-04-30 21:15:53
【问题描述】:
我可能对高级 json/gson 用户有一些简单的问题。我收到如下请求:
[{
"1": {
"2": "6+"
}
},{
"1": []
}]
我尝试使用 gson 将其反序列化为 java 对象,但遇到了问题。 Gson 向我报告:
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line X column Y
我看到的问题是,在第一项中,'1' 值被声明为对象,而在第二项中,值被声明为数组。我对生成的 JSON 没有影响。知道如何正确映射吗?
也许在 gson 中我可以添加一些钩子,并且在解析期间会影响应该如何处理项目?例如。当项目“1”的值为“[]”时,做一些不同于给定具有值的对象时的事情?
在 Arkain 评论之后我必须添加:
- 在呈现的示例中,我们仍然拥有相同的对象 - 但呈现方式不同:/(一次作为空数组 - 其他时间作为对象)
-
从分析我认为 Object 应该表示为例如
public class Example { Map<String, Object> 1 = new Map<String,Object>; ... }但我不知道为什么当 map 为空时在 JSON 中表示为空数组。
- 我不知道 JSON 集合中的位置数量和特定位置的类型。
【问题讨论】:
-
这是合法的 JSON,只需反序列化即可。 (你有一个包含两个“对象”的数组。第一个有一个值是另一个“对象”,第二个有一个值是一个数组。这不会很好地反序列化为 POJO——你必须处理它作为数组和对象。)
标签: java json deserialization gson pojo