Java映射到JSON{quot;key";:“value";,“key1";:“value1";}as";“关键点”是:“价值”;键1“是:&引用;价值1“;使用杰克逊
我有一个有地图的pojo样本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
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);
}
}