简体   繁体   English

发行Json与Jackson的映射问题

[英]Issue mapping Json with jackson

I'm having some issues mapping the next json in java: 我在映射Java中的下一个json时遇到一些问题:

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

to the next java bean: 到下一个Java bean:

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

is it posible to map using jackson? 使用杰克逊地图可以吗? What i would like is to get value inside detail to detail on bean and value inside listed to listed on bean, and finally the key value to adId. 我想要的是获取详细信息到bean的详细信息,并获取列出到bean的详细信息,最后获取adId的键值。 is there other alternative to map this? 还有其他替代方法可以映射吗? Best way? 最好的办法?

Thanks in advance. 提前致谢。

I guess that you have to use a custom Deserializer. 我猜您必须使用自定义反序列化器。 This seems to work: 这似乎可行:

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);
    }
}

and your object will be something like 你的对象将是类似

@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