杰克逊将字符串转换为对象

Posted

技术标签:

【中文标题】杰克逊将字符串转换为对象【英文标题】:Jackson Converting String to Object 【发布时间】:2017-10-03 21:49:33 【问题描述】:

Link.java

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder( "rel", "href","method" )
public class Link 

    @JsonProperty("rel")
    private String rel;
    @JsonProperty("href")
    private String href;
    @JsonProperty("method")
    private Method method;

    @Override
    public String toString() 
        return ToStringBuilder.reflectionToString(this);
    

我有这个带有fastxml jackson 注释的第三方类。我可以使用指定的 toString() 方法将给定对象转换为字符串。有什么方法可以使用该字符串来获取 Link 类型的对象吗?

注意:对象本身有一个嵌入对象(其中还有几个嵌入对象),这些也需要从字符串本身转换为 Method 对象。

【问题讨论】:

不要使用 toString 使用jackson ObjectMapper::readValue 和 ObjectMapper::writeValueAsString 使用new ObjectMapper().readValue(jsonString, Link.class); @pvpkiran ...虽然ToStringBuilder 可以配置为输出JSON,ObjectMapper 可以使用。 是的,你可以,但在某些情况下,toString() 在嵌套对象和集合的情况下表现非常糟糕。尝试使用 toString 和 ObjectMapper 打印地图或列表并查看差异 【参考方案1】:

只需将@pvpkiran 的评论放在答案中即可。

使用 com.fasterxml.jackson.databind 中的 ObjectMapper 类

ObjectMapper objectMapper = new ObjectMapper();

从对象转换为字符串:

String jsonString = objectMapper.writeValueAsString(link);

从字符串转换为对象:

Link link = objectMapper.readValue(jsonString, type)

【讨论】:

我们也可以这样调用 String jsonString = objectMapper.writeValueAsString(Object); 如果不知道什么是类类型怎么办?

以上是关于杰克逊将字符串转换为对象的主要内容,如果未能解决你的问题,请参考以下文章

序列化对象时如何强制杰克逊将数字写为字符串

使用杰克逊将具有重复元素的 XML 转换为 JSON

停止杰克逊读数字作为字符串

Java - 使用杰克逊将 json 转换为复杂对象

如何使用杰克逊制作自定义反序列化器将数字(即部门 ID)转换为部门对象?

如何发送纯 JSON 对象(位于模型对象内)以在 Spring Boot 中查看?