java - 无法从字符串值 ('{' 实例化 java.util.LinkedHashMap 类型的值;没有单字符串构造函数/工厂方法

标签 java json jackson fasterxml

我有以下两个类:

@JsonIgnoreProperties(ignoreUnknown = true)
public class ChangesJSON {

    @JsonProperty("changes")
    List<ChangeJSON> changes;

    @JsonProperty("more")
    Boolean more;
}

public class ChangeJSON {

    @JsonProperty("epoch")
    Long epoch;

    @JsonProperty("payload")
    Map<String, Object> payload;
}

当我尝试使用此测试反序列化时:

String test = "{\"changes\":[{\"epoch\":1441556306522,\"payload\":\"{\"to\":1}\"},{\"epoch\":1441555481524,\"payload\":\"{\"to\":-1}\"}],\"more\":false}";

@Test
public void myTest() {
    ObjectMapper mapper = new ObjectMapper();
    ChangesJSON result = null;
    try {
        result = mapper.readValue(test, ChangesJSON.class);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    assertNotNull(result);
}

我得到以下异常:

com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type java.util.LinkedHashMap from String value ('{'); no single-String constructor/factory method at [Source: {"changes":[{"epoch":1441556306522,"payload":"{"to":1}"},{"epoch":1441555481524,"payload":"{"to":-1}"}],"more":false}; line: 1, column: 35] (through reference chain: demo.ChangesJSON["changes"]->java.util.ArrayList[0]->demo.ChangeJSON["payload"])

map 似乎有问题,但我认为 Jackson 应该能够处理 map 。当我将 map 更改为 map 时,我也会遇到同样的问题。但我确实需要支持各种类作为 map 的值。

最佳答案

payload 对象有引号。尝试更改此部分:

\"payload\":\"{\"to\":1}\"

进入这个:

\"payload\":{\"to\":1}

关于java - 无法从字符串值 ('{' 实例化 java.util.LinkedHashMap 类型的值;没有单字符串构造函数/工厂方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32432104/

相关文章:

java - @JsonTypeInfo 无效

java - kubernetes 中两个独立的 hazelcast 集群

java - 需要故障转储翻译

mysql - 无法让 MYSQL 在 Laravel 中正确查询 JSON 列

java - 尽管使用 JsonIgnore,但未能延迟初始化 ManyToMany 关系中的角色集合

java - 如何从 Java 中的 JSON 文件中删除键值对

java - 计算当前时间和 future 时间的时差

java - 使用 swing 的动画和使用 javafx 的动画之间的区别

javascript - 映射出 JSON 结构

Java - 要 Set<T> 的 Json 字符串