java - json jackson异常 map 序列化

标签 java json jackson

假设,我有以下结构:

public class SomeClass {
private String id;
@JsonProperty("key-value")
private Map<String, Object> keyValue;}

显然,它会被序列化为

 {
   "id" : "id1", 
   "key-value" : 
    {"key1" : "value1",
    "key2 : "value2"}
 }

可以这样表示吗?

 {
   "id" : "id1", 
   "key1" : "value1",
   "key2 : "value2"
 }

提前致谢!

最佳答案

在 Jackson 的自定义序列化器的帮助下,这很有可能:

  1. @JsonSerialize 注解添加到您的 POJO:

(还添加了必要的构造函数和 setter/getter )

@JsonSerialize(using = SomeClassSerializer.class)
public static class SomeClass {
    private String id;
    @JsonProperty("key-value")
    private Map<String, Object> keyValue;

    public SomeClass(String id, Map<String, Object> keyValue) {
        this.id = id;
        this.keyValue = keyValue;
    }
    public String getId() { return id; }
    public Map<String, Object> getKeyValue() { return keyValue; }
}
  • 自定义序列化器如下所示:
  • :

    public class SomeClassSerializer extends JsonSerializer<SomeClass>
    {
        @Override
        public void serialize(SomeClass sc, JsonGenerator gen, SerializerProvider serializers)
                throws IOException, JsonProcessingException
        {
            gen.writeStartObject();
            // write id propertry
            gen.writeStringField("id", sc.getId());   
            // loop on keyValue entries, write each as property
            for (Map.Entry<String, Object> keyValueEntry : sc.getKeyValue().entrySet()) {
                gen.writeObjectField(keyValueEntry.getKey(), keyValueEntry.getValue());
            }
            gen.writeEndObject();
        }
    }
    
  • 调用 Jackson 的映射器以通常的方式完成:
  • :

    public static void main(String[] args)
    {
        Map<String, Object> keyValue = new HashMap<>();
        keyValue.put("key1", "value1");
        keyValue.put("key2", "value2");
        keyValue.put("key3", new Integer(10));
        SomeClass sc = new SomeClass("id1", keyValue);
    
        try {
            new ObjectMapper().writeValue(System.out, sc);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    

    输出:

    {"id":"id1","key1":"value1","key2":"value2","key3":10}
    

    关于java - json jackson异常 map 序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33797404/

    相关文章:

    java - 在 BlackBerry sim 上使用 ";deviceside=true"执行 browserfield 时出现问题

    java - java中rt.jar文件有什么用?

    java - Jackson 在序列化期间排除了容器(List、Map、Collection)的类型信息

    java - 动态 json 响应 : Could not read JSON: N/A (through reference chain) jackson fasterxml

    java - Lucene 6 - 使用术语词汇表存储数字字段的推荐方法

    javascript - 如何跟踪外部 JSON 文件的更改

    javascript - 当对象在 Javascript 中是 JSON 格式时,有没有办法访问对象属性?

    java - 使用 Jackson ObjectIdGenerator 将 Json 转换为集合时出现问题

    java - 嵌套对象的 jackson 序列化

    Java 版本 - Maven - 类路径?