java - 为什么我无法使用 Jackson Java 库解包和序列化 Java map ?

标签 java json jackson

我的 bean 看起来像这样:

class MyBean {

    private @JsonUnwrapped HashMap<String, String> map = new HashMap<String, String>();

    private String name;

    public HashMap<String, String> getMap() {
        return map;
    }

    public void setMap(HashMap<String, String> map) {
        this.map = map;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

当我使用以下代码序列化 bean 时:

MyBean bean = new MyBean();
HashMap<String, String> map = new HashMap<String, String>();;
map.put("key1", "value1");
map.put("key2", "value2");
bean.setMap(map);
bean.setName("suren");
ObjectMapper mapper = new ObjectMapper();
System.out.println("\n"+mapper.writeValueAsString(bean));

我得到这样的结果:

{"map":{"key2":"value2","key1":"value1"},"name":"suren"}

但是

{"key2":"value2","key1":"value1","name":"suren"}

预计根据 JacksonFeatureUnwrapping documentation .为什么我没有得到解包结果?

最佳答案

@JsonUnwrapped 不适用于 map ,仅适用于带有 getter 和 setter 的适当 POJO。对于 map ,您应该使用 @JsonAnyGetter@JsonAnySetter (在 jackson 版本 >= 1.6 中可用)。

在你的情况下,试试这个:

@JsonAnySetter 
public void add(String key, String value) {
    map.put(key, value);
}

@JsonAnyGetter
public Map<String,String> getMap() {
    return map;
}

这样,你也可以直接给 map 添加属性,比如 add('abc','xyz') 会给 map 添加一个新的键 abc具有值 xyz

关于java - 为什么我无法使用 Jackson Java 库解包和序列化 Java map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18043587/

相关文章:

jquery - 无法从带注释的 Controller 获取自动格式化的 json 数据

java - 意外字符 ('<'(代码 60))

java - 如何在改造界面中从 strings.xml 中获取值?

java - Docker重启-保留环境变量

ios - 使用 Objective-C 将 JSON 数据传输到 UITableView

javascript - Froala - 图片上传 JSON 响应

java - JLabel文本不显示

java - Java Micro Edition 最好的语音识别库是什么?

php - 如何使用 json 对象数组生成有效的 json 输出

java - Java中如何从请求中只获取一个String参数?