将JSON对象转换为复杂的POJO

时间:2016-03-04 19:08:29

标签: java json pojo

我在将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:field 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。 所以我的客户端代码能够转换我的User对象,但是如果里面有另一个复杂的对象,它就无法转换它。

1 个答案:

答案 0 :(得分:1)

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

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

我使用的导入是:

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