作爲對StaxMan答案的一個微小修改,如果某種地圖中的所有對象都不是User
,Jackson會提供@JsonAnySetter和@JsonAnyGetter註釋以完成作業。以下示例演示瞭如何使用它。
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.annotate.JsonAnySetter;
import org.codehaus.jackson.annotate.JsonAutoDetect.Visibility;
import org.codehaus.jackson.annotate.JsonMethod;
import org.codehaus.jackson.map.ObjectMapper;
public class JacksonFoo
{
public static void main(String[] args) throws Exception
{
// {"sc":"200","msg":"something","userInfo":{"name":"n","password":"p"}}
String jsonInput = "{\"sc\":\"200\",\"msg\":\"something\",\"userInfo\":{\"name\":\"n\",\"password\":\"p\"}}";
ObjectMapper mapper = new ObjectMapper().setVisibility(JsonMethod.FIELD, Visibility.ANY);
Result result = mapper.readValue(jsonInput, Result.class);
System.out.println(result);
// output:
// Result: userInfo=User: name=n, password=p, otherThings={sc=200, msg=something}
}
}
class Result
{
Map otherThings = new HashMap();
User userInfo;
@JsonAnySetter
void addThing(String key, Object value)
{
otherThings.put(key, value);
}
@Override
public String toString()
{
return String.format("Result: userInfo=%s, otherThings=%s", userInfo, otherThings);
}
}
class User
{
String name;
String password;
@Override
public String toString()
{
return String.format("User: name=%s, password=%s", name, password);
}
}
^_ ^嘿嘿!非常感謝,但我真的想知道是否有一些方法可以獲得它。 – YETI
@JsonAnySetter註釋可能會做你正在嘗試完成的事情。我會舉一個例子。 –