使用 JSON 字符串键重命名 JSON 字符串到 Java 对象

沙拉湾

我对将 JSON 字符串转换为 Java 对象有以下要求。

class Person {
     private String firstName;
     private String lastName;
}
ObjectMapper MAPPER = new ObjectMapper();
String jsonString = "{\"FST_NME\":\"stack\",\"LST_NME\":\"OVERFLOW\"}";
Person person = MAPPER.readValue(jsonString, Person.class);

由于 Person 类属性名称不匹配,上述转换返回 null。

使用@JsonProperty它可以正确转换,但最终的 JSON 结果键与 jsonString 中的键相同。

{
   "FST_NME" : "stack",
   "LST_NME" : "overflow"
}

但我正在寻找类似下面的东西。

{
   "firstName" : "stack",
   "lastName" : "overflow"
}

我尝试重命名 jsonString 中的键,它按预期工作。

但是我们可以使用任何注释或任何其他方法来实现上述结果吗?

谢谢。

乌拜德·乌尔·拉赫曼

您只需要添加@JsonPropertysetter 和 getter。

在您的情况下,您正在读取 JSON 字符串 key FST_NME,因此您需要添加@JsonProperty('FST_NME')setter 方法firstName,因为您希望使用 key 获取最终的 JSON 字符串,firstName因此您需要添加@JsonProperty('firstName').getter 方法firstName也一样lastName

以下是工作代码。

package com.ubaid.stackoverflow;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Saravanan {

    @SneakyThrows
    public static void main(String[] args) {

        ObjectMapper MAPPER = new ObjectMapper();
        String jsonString = "{\"FST_NME\":\"stack\",\"LST_NME\":\"OVERFLOW\"}";
        Person person = MAPPER.readValue(jsonString, Person.class);
        String finalJson = MAPPER.writeValueAsString(person);
        log.debug("Final JSON: {}", finalJson);
    }
}

class Person {
    private String firstName;
    private String lastName;

    @JsonProperty("firstName")
    public String getFirstName() {
        return firstName;
    }

    @JsonProperty("FST_NME")
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    @JsonProperty("lastName")
    public String getLastName() {
        return lastName;
    }

    @JsonProperty("LST_NME")
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

上面代码的输出是:

Final JSON: {"firstName":"stack","lastName":"OVERFLOW"}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章