yiw*_*wei 11 java json jackson
我有一些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"
}
Run Code Online (Sandbox Code Playgroud)
我的Box
对象看起来像:
public class Box {
@JsonProperty
Map<String, Object> json;
public Box() {
// Blank
}
// Getter and setter for `json` field
}
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Box box = null;
// `JSON_STRING` below refers to a string of the above JSON
metricsPacket = new ObjectMapper().readValue(JSON_STRING, Box.class);
Run Code Online (Sandbox Code Playgroud)
我一直收到这个错误:
com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "created_date" (class com.me.Box), not marked as ignorable (one known property: "json"])
我在网上找到的所有例子都只是将JSON反序列化为一个带有少量String
或int
成员变量的简单POJO .如何正确地将我的JSON映射到我的json
字段并使其行为正确?
我想像一旦这个作品json.get("id")
会返回12345
而json.get("values")
将返回另一个Map<String, Object>
(或Map<String, String>
).我还是刚开始使用杰克逊,所以这也可能不是我想做的事情的正确方法.任何帮助,将不胜感激!
Luc*_*ord 10
首先,解决你的问题.您正在尝试将JSON反序列化为没有JSON字符串中存在字段的类,因此它无法找到这些字段并返回异常.
您也可以执行以下操作:
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.readValue(JSON_STRING, new TypeReference<Map<String, String>>(){});
box.setJsonMap(map);
Run Code Online (Sandbox Code Playgroud)
box将有一个setter来设置json映射
或者您可以将所有字段添加到Box POJO并使用GSON使这更容易!
例如Json - > Object
Gson gson = new Gson();
Box box = gson.fromJson(JSON_STRING, Box.class);
Run Code Online (Sandbox Code Playgroud)
例如对象 - > Json
Gson gson = new Gson();
String str = gson.toJson(mBox); //mBox is some box object
Run Code Online (Sandbox Code Playgroud)
GSON将填充框内的所有字段以匹配JSON字符串中找到的键值对.如果您不想这样做,请忽略它,但这是另一种选择!
归档时间: |
|
查看次数: |
9050 次 |
最近记录: |