Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java映射到JSON{quot;key";:“value";,“key1";:“value1";}as";“关键点”是:“价值”;键1“是:&引用;价值1“;使用杰克逊_Java_Java 8_Jackson - Fatal编程技术网

Java映射到JSON{quot;key";:“value";,“key1";:“value1";}as";“关键点”是:“价值”;键1“是:&引用;价值1“;使用杰克逊

Java映射到JSON{quot;key";:“value";,“key1";:“value1";}as";“关键点”是:“价值”;键1“是:&引用;价值1“;使用杰克逊,java,java-8,jackson,Java,Java 8,Jackson,我有一个有地图的pojo样本 class Sample { private Integer id; private String name; private Map<String,Object> map; public Map<String,Object> getMap() { return map; } public void setMap(Map<String, Object> map) { this.map = m

我有一个有地图的pojo样本

class Sample {
  private Integer id;
  private String name;
  private Map<String,Object> map;
  public Map<String,Object> getMap() {
    return map;
  }
  public void setMap(Map<String, Object> map) {
    this.map = map;
  }
  public Integer getId() {
    return id;
  }
  public void setId(Integer id) {
    this.id = id;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
}
我想把这张地图写成

{
  "id" : 1234,
  "name" : "abc",
  "key1" : {
       "field" : "value",
       "field1" : "value"
  },
  "key2" : [
     {
        "something" : "a",
        "somethingElse" : 1
     },
     {
        "something" : "b",
        "somethingElse" : 2
     }
  ]
}

有没有不使用自定义序列化程序就可以实现此目的的方法?

如果可以使用Jackson,则以下代码可以帮助您:

class Sample {

  private Map<String,Object> map = new HashMap<>();
  @JsonAnyGetter
  public Map<String,Object> getMap() {
    return this.map;
  }
  public void setMap(Map<String, Object> map) {
    this.map = map;
  }
  @JsonAnySetter
  public void addValue(String key, Object value) {
    this.map.put(key, value);
  }
}
类示例{
私有映射映射=新的HashMap();
@JsonAnyGetter
公共地图getMap(){
返回此.map;
}
公共无效集合映射(映射映射){
this.map=map;
}
@JSONANYSETER
public void addValue(字符串键、对象值){
this.map.put(键、值);
}
}

在这种情况下,对于所有未知字段,这将通过它们的键存储(或获取)值。

为什么要为映射设置包装器类。你不能直接序列化映射以获得你想要的JSON吗?所以你只想去掉外部的
“映射”:{…}
?在这种情况下,只需序列化映射本身,而不是包装器。但是,如果该包装器碰巧也包含其他字段,则最好不要删除该“映射”级别。@Thomas Yes我想删除“映射”:{…}。我正在探索除自定义序列化程序之外的其他选项,比如mixin或Jackon的propertyNamingStrategy
class Sample {

  private Map<String,Object> map = new HashMap<>();
  @JsonAnyGetter
  public Map<String,Object> getMap() {
    return this.map;
  }
  public void setMap(Map<String, Object> map) {
    this.map = map;
  }
  @JsonAnySetter
  public void addValue(String key, Object value) {
    this.map.put(key, value);
  }
}