java - 如何映射包含名为 long 和 Short 的成员的 JSON 字符串

标签 java jackson fasterxml

我需要映射一个 JSON 字符串,其中包含名为 long 和short 的值:

"status": {
   "long": "Finished",
   "short": "F",
   "elapsed": 90
}

我尝试了以下类(class):

public class Status {

    @JsonProperty("long")
    public String _long;
    @JsonProperty("short")
    public String _short;
    @JsonProperty("elapsed")
    public Object elapsed;

}

使用命令:

objectMapper.readValue(resBody, Response.class);

响应包含状态部分:

{
    "response": {
        "id": 157016,
        "timezone": "UTC",
        "date": "2019-08-10T11:30:00+00:00",
        "timestamp": 1565436600,
        "status": {
            "long": "Long Value",
            "short": "LV",
            "elapsed": 20
        }
    }
}

但我仍然收到以下错误:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "long"

如何解决这个问题?我无法控制 JSON 格式。

最佳答案

嗯,这显然不是问题的完美解决方案,但人们可能会发现它是一种有用的解决方法:

由于我不关心这些值,因此我只需重命名它们的名称并相应地调整类成员名称:

在作为响应得到的 json 字符串 resBody 上,我将执行以下操作

@NotNull 
private static String mitigateLongAndShortValueNames(String resBody) { 
   resBody = resBody.replaceAll("\"long\":", "\"longValue\":"); 
   resBody = resBody.replaceAll("\"short\":", "\"shortValue\":"); 
   return resBody; 
} 

并改变

public class Status {

    @JsonProperty("long")
    public String _long;
    @JsonProperty("short")
    public String _short;
    @JsonProperty("elapsed")
    public Object elapsed;

}

public class Status {

    public String longValue;
    public String shortValue;
    public Object elapsed;

}

这对我有用!

关于java - 如何映射包含名为 long 和 Short 的成员的 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72242140/

相关文章:

java - 使用匹配器和模式从字符串中提取 float

java - 删除对象的引用

java - 从 Google Map 获取结果并将数据传输回之前的 fragment

jackson - 相当于 Jackson 的 JsonAnySetter 的 moxy 是什么?

java - 从 json 字符串反序列化字节数组

java - Spring MVC/Spring Data 数据获取递归

java xmx 选项无法识别

java - ObjectMapper 将日期更改为字符串

spring-boot - 为 ObjectMapper 创建多个 bean

java - 使用 FasterXML Jackson 进行奇怪的 JSON 序列化