簡體   English   中英

反序列化為Map <String, String> 與傑克遜

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM