【问题标题】:Convert JSON object to complex POJO将 JSON 对象转换为复杂的 POJO
【发布时间】:2016-03-04 19:08:28
【问题描述】:

我在将 JSON 对象转换为我的 POJO 对象时遇到问题。 我的 POJO 对象是这个:

public class User {

    private String firstName;
    private String gender;
    private String id;
    private PswUser psw;
    private String state;
    ...

}

User 对象在另一个对象 PswUser 内部:

public class PswUser {

    private String id;
    private String psw;
    private String salt;
    ...

}

我尝试将我的 User 的 JSON 表示形式转换为我的 User.class 对象,如下所示:

ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(myjson.toString(), User.class);

但我不断收到此错误:

java.lang.IllegalArgumentException:字段 psw 的类型为 PswUser,得到 java.Util.LinkedHashMap

我发现让它工作的唯一方法是从我的 json 中删除“psw”对象,解析 PswUser,然后再次将 PswUser 添加到用户,如下所示:

JSONObject pswJson = json.getJSONObject("psw");
json.remove("psw");
User user = mapper.readValue(json.toString(), User.class);
PswUser pswuser = mapper.readValue(pswJson.toString(), PswUser.class);
user.setPsw(pswuser);

但这对我来说是一个糟糕的解决方案,我必须解析更复杂的对象,每次都这样做会是个大问题。

更新:

这是我的输入 json:

{"firstName":"Mark","psw":{"id":"ag5zfmRlYnVn","psw":"01f0047c","salt":"597948b852bba"},"state":null,"id":"ag5zfm","gender":"male"}

更新 2:

问题是由于我从我的 appengine 服务器获取 User.class 和 PswUser.class,导入了一个 jar。 所以我的客户端代码能够转换我的用户对象,但如果里面有另一个复杂的对象,它就无法转换它。

【问题讨论】:

  • 您是否意识到,如果没有看到 JSON,任何人都几乎不可能帮助您?
  • 你使用什么 JSON 库?
  • 我添加了我的输入 json。我的 json 对象来自 org.json 库。对象映射器来自 org.codehaus.jackson.map
  • 如果你用有效的PswUser, 构造一个User 并要求ObjectMappermapper.writeValueAsString() 将该转换为 JSON,输出是什么样的?
  • 我按照你说的尝试了,但我得到了相同的结果。我创建了一个简单的用户,对象 PswUser 设置并转换为字符串,但是当我尝试再次将其转换为用户对象时,它给了我与以前相同的异常

标签: java json pojo


【解决方案1】:

我终于找到了解决问题的方法。 我使用 JacksonFactory 类来解析我的 JSON 字符串:

JacksonFactory factory = new JacksonFactory();
User user = factory.fromString(json.toString(), User.class);

我使用的导入是:

import com.google.api.client.json.jackson2.JacksonFactory;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多