jackson:将包含对象类的JSON转换为Map

YET*_*ETI 5 dictionary jackson

对象类:

class User{
    public String name;
    public String password;
}
Run Code Online (Sandbox Code Playgroud)

JSON:

{ sc:"200", msg:"something", userInfo:{name:"n", password:"p"} }
Run Code Online (Sandbox Code Playgroud)

我想得到这样的结果:

Map->contains 3 key-value
"sc"="200"
"msg"="something"
"userInfo"=User(Object Class)
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?或者,我如何才能使用其他JAR工具包?

Sta*_*Man 8

您必须选择是否需要"无类型"(地图,列表,包装),这很容易获得:

Map<String,Object> map = new ObjectMapper().readValue(json, Map.class);
Run Code Online (Sandbox Code Playgroud)

或POJO.问题是,mapper确实无法知道你想要"userInfo"映射到特定对象,而是将其他值映射到其他东西.

但我宁愿只创建另一个类,如:

public class Request {
   public int sc;
   public String message;
   public User userInfo;
   // and/or getters, setters, if you prefer
}
Run Code Online (Sandbox Code Playgroud)

并绑定到:

Request req = new ObjectMapper().readValue(json, Request.class);
Run Code Online (Sandbox Code Playgroud)

当你有真正的POJO时,为什么要搞乱不方便的地图呢?:)