Sur*_*aju 14 java json jackson
我有这样的豆子
class Foo {
private Map<String, Data> dataMap;
private String fooFieldOne;
private String fooFieldTwo;
}
class Data {
private fieldOne;
private fieldTwo;
}
Run Code Online (Sandbox Code Playgroud)
我想像Json一样序列化
{
"key1": {
"fieldOne": "some value",
"fieldTwo": "some value"
},
"key2": {
"fieldOne": "some other value",
"fieldTwo": "some other value"
},
"fooFieldOne":"valueone",
"fooFieldTwo":"valuetwo"
}
Run Code Online (Sandbox Code Playgroud)
但我得到的结果就像
{
"dataMap": {
"key1": {
"fieldOne": "some value",
"fieldTwo": "some value"
},
"key2": {
"fieldOne": "some other value",
"fieldTwo": "some other value"
}
},
"fooFieldOne":"valueone",
"fooFieldTwo":"valuetwo"
}
Run Code Online (Sandbox Code Playgroud)
如何在上面的json中忽略dataMap图层?我正在使用java jackson库.
我试过的代码是
ObjectMapper mapper = new ObjectMapper();
mapper.writeValueAsString(myFOOObject)
Run Code Online (Sandbox Code Playgroud)
Bar*_*art 11
您可以为dataMap创建一个getter 并序列化dataMap而不是整个Foo实例.
mapper.writeValueAsString(myFOOObject.getDataMap());
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用@JsonUnwrapped注释.这个注释可以在Jackson 1.9+中找到.
http://jackson.codehaus.org/1.9.9/javadoc/org/codehaus/jackson/annotate/JsonUnwrapped.html
小智 5
我找到了答案 - 使用 @JsonAnyGetter 注释和地图的 getter。为了避免反序列化期间发生冲突,应使用 @JsonAnySetter 注释和此映射的 setter。