我有以下 JSON:
{
"parameters": [{
"value": "somevalue",
"key": "somekey"
},
{
"value": "othervalue",
"key": "otherkey"
}
]
}
请注意,此响应的契约(Contract)保证 key 是唯一的。
我想将其反序列化为以下类:
public class Response {
public Map<String, String> parameters;
}
我如何使用 Jackson 库执行此操作?
最佳答案
你需要注册一个解串器:
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;
}
}
关于java - 使用 Jackson 反序列化为 Map<String, String>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48060487/