java如何使用Jackson将JSON反序列化为Map<String,Object>成员变量?
我想把一些JSON映射到我的Box
对象:
{
"created_date": "2015-11-11",
"generation_date": "2015-11-12T20:35:00+0000",
"values": {
"MORNING": 13,
"EVENING": 18,
"NOON": 446,
"NIGHT": "0.60.0"
},
"id": "12345"
}
我的Box
对象看起来像:
public class Box {
@JsonProperty
Map<String, Object> json;
public Box() {
// Blank
}
// Getter and setter for `json` field
}
这是我的代码:
Box box = null;
// `JSON_STRING` below refers to a string of the above JSON
metricsPacket = new ObjectMapper().readValue(JSON_STRING, Box.class);
我一直在犯这样的错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "created_date" (class com.me.Box), not marked as ignorable (one known property: "json"])
我在网上找到的所有示例都只是将JSON反序列化为一个简单的POJO,其中包含一些String
或int
成员变量。如何正确地将JSON映射到我的json
字段并使其正确运行
我可以想象,一旦这项工作json.get("id")
将返回12345
,而json.get("values")
将返回另一个Map<String, Object>
(或Map<String, String>
)。我还不熟悉使用Jackson,所以这可能不是我想做的事情的正确方式。任何帮助都将不胜感激
# 1 楼答案
我认为你需要在构造器中添加一个带注释的参数。比如
# 2 楼答案
首先,解决你的问题。您试图将JSON反序列化为一个JSON字符串中没有字段的类,因此它无法找到这些字段并返回异常
您也可以执行以下操作:
where box将有一个setter来设置json映射
或者,您可以将所有字段添加到您的BOXPOJO中,并使用GSON来简化此操作
例如,Json->;反对
例如,对象->;Json
GSON将填充box中的所有字段,以匹配JSON字符串中的键、值对。如果你不想这样做,请忽略这个,但这是另一种选择