Java 如何将JSON反序列化为映射<;字符串,对象>;使用Jackson的成员变量?
我有一些JSON要映射到我的Java 如何将JSON反序列化为映射<;字符串,对象>;使用Jackson的成员变量?,java,json,jackson,Java,Json,Jackson,我有一些JSON要映射到我的框对象: { "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"
框
对象:
{
"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"
}
我的框
对象看起来像:
public class Box {
@JsonProperty
Map<String, Object> json;
public Box() {
// Blank
}
// Getter and setter for `json` field
}
我不断地发现这个错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:未识别字段“created_date”(class com.me.Box),未标记为可忽略(一个已知属性:“json”)
我在网上找到的所有示例都只是将JSON反序列化为一个简单的POJO,其中包含少量String
或int
成员变量。如何正确地将JSON映射到我的JSON
字段,并使其正确运行
我可以想象,一旦这个方法起作用,
json.get(“id”)
将返回12345
,而json.get(“值”)
将返回另一个Map
(或Map
)。我还不熟悉使用Jackson,所以这也可能不是我想做的事情的正确方式。任何帮助都将不胜感激 我认为您需要向构造函数添加带注释的参数。比如说,
public Box(@JsonProperty("json") Map<String, Object> json) {
// TODO
}
public框(@JsonProperty(“json”)映射json){
//待办事项
}
首先,解决您的问题。您试图将JSON反序列化为JSON字符串中没有字段的类,因此它无法找到这些字段并返回异常
您也可以执行以下操作:
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(JSON_STRING, new TypeReference<Map<String, String>>(){});
box.setJsonMap(map);
例如,对象->Json
Gson gson = new Gson();
String str = gson.toJson(mBox); //mBox is some box object
GSON将填充box中的所有字段,以匹配JSON字符串中的键、值对。如果你不想这样做,请忽略此项,但这是另一种选择
TypeReference
withimport com.fasterxml.jackson.core.type.TypeReference代码>@lucas crawford,如果以后要再次设置映射,则不需要实例化它。
Gson gson = new Gson();
Box box = gson.fromJson(JSON_STRING, Box.class);
Gson gson = new Gson();
String str = gson.toJson(mBox); //mBox is some box object