我一直在使用jackson反序列化成功的json对象和数组,但这次我无法解决如何对下面的对象进行反序列化的问题。如何使用Jackson或任何其他json解析库进行反序列化:
[
{
"name": "x",
"elements": {
"key1": {
"name": "a",
"type": "b"
},
"key2": {
"name": "a",
"type": "b"
}
}
},
{
"name": "y",
"elements": {
"key3": {
"name": "a",
"type": "b"
}
}
}
]
到列表List<Test>
,其中Test定义如下?
public class Test {
public class Element {
public String name;
public String type;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
public String name;
public Map<String, Element> elements;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Map<String, Element> getElements() {
return elements;
}
public void setElements(Map<String, Element> elements) {
this.elements = elements;
}
}
最后,我的反序列化代码:
public List<Test> test(final InputStream inputStream) {
List<Test> test = null;
try {
test = mapper.readValue(inputStream, new TypeReference<List<Test>>() { });
} catch (final IOException e) {
log.error("Unable to deserialize json",e);
}
return test;
}
如果那是不可能的,我可以将我的json反序列化为什么对象?我事先无法知道的一件事是键的名称(示例中的key1,key2,key3)。
答案 0 :(得分:2)
看起来像这样:
ObjectMapper mapper = new ObjectMapper();
List<Test> tests = mapper.readValue(jsonInput, new TypeReference<List<Test>>() { };
会这样做。唯一棘手的部分是TypeReference
,它是传递泛型类型信息所必需的。其他lib使用类似的方法(GSON有TypeToken
等)。