![](/img/trans.png)
[英]Is there a built in way to deserialize Map<String,String> in Jackson
[英]Deserialize into Map<String, String> with Jackson
我有以下JSON:
{
"parameters": [{
"value": "somevalue",
"key": "somekey"
},
{
"value": "othervalue",
"key": "otherkey"
}
]
}
請注意,此響應的合同保證密鑰是唯一的。
我想將其分解為以下類:
public class Response {
public Map<String, String> parameters;
}
我如何使用傑克遜圖書館這樣做?
您需要注冊反序列化器:
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule();
module.addDeserializer(Response.class, new ResponseDeserializer());
mapper.registerModule(module);
Response resp = mapper.readValue(myjson, Response.class);
這是一個例子:
public class ResponseDeserializer extends StdDeserializer<Response> {
public ResponseDeserializer() {
this(null);
}
public ResponseDeserializer(Class<?> vc) {
super(vc);
}
@Override
public Response deserialize(JsonParser jp, DeserializationContext dc)
throws IOException, JsonProcessingException {
Response resp = new Response();
resp.parameters = new HashMap<>();
JsonNode node = jp.getCodec().readTree(jp);
ArrayNode parms = (ArrayNode)node.get("parameters");
for (JsonNode parm: parms) {
String key = parm.get("key").asText();
String value = parm.get("value").asText();
resp.parameters.put(key, value);
}
return resp;
}
}
您需要一個自定義反序列化器 。
你能將你的JSON改成以下嗎?
{
"parameters": {
"somekey": "somevalue",
"otherkey" : "othervalue"
}
}
如果是這樣,反序列化應該沒有任何自定義反序列化器。
(參考: https : //blog.hackingcode.io/jackson-java-tutorial-deserialize-json-to-map/ )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.