簡體   English   中英

發行Json與Jackson的映射問題

[英]Issue mapping Json with jackson

我在映射Java中的下一個json時遇到一些問題:

{
  "aggregations": {
    "asMap": {
      "detail": {
        "name": "detail",
        "value": 35100
      },
      "listed": {
        "name": "listed",
        "value": 618
      }
    }
  },
  "docCount": 9,
  "key": "789028",
  "keyAsNumber": 789028,
  "keyAsText": {}
}

到下一個Java bean:

public class RankingValue  {
    private Integer adId;
    private Integer listed;
    private Integer detail;
    ...
    ...
}

使用傑克遜地圖可以嗎? 我想要的是獲取詳細信息到bean的詳細信息,並獲取列出到bean的詳細信息,最后獲取adId的鍵值。 還有其他替代方法可以映射嗎? 最好的辦法?

提前致謝。

我猜您必須使用自定義反序列化器。 這似乎可行:

public class RankingValueDeserializer extends JsonDeserializer<RankingValue> {

    @Override
    public RankingValue deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
        JsonNode node = jp.getCodec().readTree(jp);
        Integer key = node.get("key").asInt();
        Integer detail = node.get("aggregations").get("asMap").get("detail").get("value").asInt();
        Integer listed = node.get("aggregations").get("asMap").get("listed").get("value").asInt();
        return new RankingValue(key, detail, listed);
    }
}

你的對象將是類似

@JsonDeserialize(using = RankingValueDeserializer.class)
public class RankingValue  {

    private Integer adId;
    private Integer listed;
    private Integer detail;

    public RankingValue(Integer key, Integer listed, Integer detail) {
        this.adId = key;
        this.listed = listed;
        this.detail = detail;
    }

    @Override
    public String toString() {
        return "RankingValue [adId=" + adId + ", listed=" + listed
                + ", detail=" + detail + "]";
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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