【发布时间】: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并要求ObjectMapper用mapper.writeValueAsString()将该转换为 JSON,输出是什么样的? -
我按照你说的尝试了,但我得到了相同的结果。我创建了一个简单的用户,对象 PswUser 设置并转换为字符串,但是当我尝试再次将其转换为用户对象时,它给了我与以前相同的异常