java - json反序列化问题

标签 java json gson jackson

有一个数组,当大小为1时,我收到的json数据不包含[];喜欢

{"firstname":"tom"}

当size大于1时,我收到的数据包含[],比如

[{"firstname":"tom"},{"firstname":"robert"}]

目前我的类包含一个数组属性

String[] firstname;
//getter setter omit here

处理点赞的代码

ObjectMapper mapper = new ObjectMapper();    
MyClass object = mapper.readValue(json, MyClass.class);

当大小大于 1 时,反序列化起作用。但是,当 size 为 1 时,反序列化失败。

我目前正在使用 jackson,这个问题有什么解决方案吗?

我想知道 jackson/gson 或任何其他库是否可以处理这个问题?

最佳答案

特别是对于 Jackson,您最好的选择是首先绑定(bind)到 JsonNode 或对象,例如:

Object raw = objectMapper.readValue(json, Object.class); // becomes Map, List, String etc

然后检查你得到了什么,再次绑定(bind):

MyClass[] result;
if (raw instanceof List<?>) { // array
  result = objectMapper.convertValue(raw, MyClass[].class);
} else { // single object
  result = objectMapper.convertValue(raw, MyClass.class);
}

但我认为您得到的 JSON 很糟糕——为什么要返回一个对象或数组,而不是大小为 1 的数组? -- 所以如果可能的话,我宁愿先修复 JSON。但如果那是不可能的,这也行得通。

关于java - json反序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5219073/

相关文章:

java - Gson:序列化 java.nio.Path 导致 StackOverflowError

java - 在 Maven 工作流中的注释处理期间在哪里生成资源?

java - 无法解析变量(if else 语句中使用的变量)

Python 顶级 JSON 索引

javascript - 在 Node 服务器上使用 mongoose 将分层 Node 从 json 文件保存到 mongodb 中

java - 用于第 3 方库的自定义 jackson 反序列化器

java - 当代码在 Solaris 5.9 上使用系统调用 "connect()"时,jni (java6) 和 X25 native 代码(C 语言)出错

java - Hibernate JPA @Inheritance TABLE_PER_CLASS JpaRepository 子实体联合选择所有表

java - 从 JSON 到 Gson 的 POJO

java - 使用 Jackson 将 Map 转换为 JSON