java - 使用不同的对象名称映射 JSON

标签 java json jackson

我对 JSON 很陌生,我环顾四周试图弄清楚该怎么做,但不确定我是否完全理解。我正在进行外部 API 调用,返回:

2015-12-21 01:22:09 INFO  RiotURLSender:60 - Total json: 
{"USERNAME":{"profileIconId":984,"revisionDate":1450655430000,"name":"USERNAME2","id":38584682,"summonerLevel":30}}

其中“USERNAME”(以及 USERNAME2 - 可能与 USERNAME 略有不同)将根据您传递的调用参数的内容而有所不同。我使用 Jackson Object Mapper 来映射 USERNAME 对象中的各个值 - 但没有意识到我也必须映射该对象。

我一直在 DTO 中使用注释,例如:

@JsonProperty("profileIconId")
private Long profileIconId;

并使用以下方式进行映射:

summonerRankedInfoDTO = mapper.readValue(jsonString, SummonerRankedInfoDTO.class);

如何使用每次都会更改的 USERNAME 值进行映射?

这似乎有点奇怪,使用实际不同的键而不是仅具有相同的键和不同的值是不好的做法吗?

谢谢

最佳答案

您可以使用下面提到的注释@JsonAnyGetter和@JsonAnySetter。 将此代码添加到您的域类中。因此,在序列化和反序列化对象时,任何非映射属性都将填充到“nonMappedAttributes”映射中。

@JsonIgnore
protected Map<String, Object> nonMappedAttributes;

@JsonAnyGetter
public Map<String, Object> getNonMappedAttributes() {
    return nonMappedAttributes;
}

@JsonAnySetter
public void setNonMappedAttributes(String key, Object value) {
    if (nonMappedAttributes == null) {
        nonMappedAttributes = new HashMap<String, Object>();
    }
    if (key != null) {
        if (value != null) {
            nonMappedAttributes.put(key, value);
        } else {
            nonMappedAttributes.remove(key);
        }
    }

}

关于java - 使用不同的对象名称映射 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34388198/

相关文章:

java - 作为电子邮件附件发送的 PDF 文件已损坏 (java)

java - 创建 GSON 对象

mysql - 如何创建 MySQL 函数来检查 JSON 有效性?

java - 使用 Jackson 解析器处理 isDeleted 等数据名称时,解析问题

java - 来自 MongoDB BSON 的 Jackson ObjectMapper

java - java中 block 2个线程访问一个if block

java - 为什么 Tomcat 8 不会在创建后立即将 session 持久保存到数据存储区?

java - 定位元件故障

php - Pinterest API - 纯 json 响应?

java - 使用 Java EE 7/Glassfish 4.1 对 JSON 进行编码(marshal)处理/解封处理导致空对象