0
我一直在使用jackson成功反序列化json對象和數組,但是這次我不能包裝我的頭以解決以下對象的反序列化問題。我怎麼能與傑克遜或任何其他JSON解析庫,反序列化:如何使用映射作爲其屬性反序列化json對象
[
{
"name": "x",
"elements": {
"key1": {
"name": "a",
"type": "b"
},
"key2": {
"name": "a",
"type": "b"
}
}
},
{
"name": "y",
"elements": {
"key3": {
"name": "a",
"type": "b"
}
}
}
]
到一個列表,List<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我到?我不能提前知道的一件事是鍵的名稱(例如鍵1,鍵2,鍵3)。
不幸的是,採用這種方法會返回一個空指針(不會產生異常)。如果我從我的json數組中刪除「元素」,那麼對於兩個條目(如預期的那樣),測試的正確大小爲兩個元素= null。 – Lolo
多田!問題來自於Element是Test中的公共類。我在一個單獨的文件中創建了一個類Element,它工作。謝謝。我真的必須更好地理解這個TypeReference。 – Lolo
啊。非靜態的內部類可能會有問題,因爲它們需要外部類的實例(「隱式父」這個'指針')。所以通常使用的內部類被定義爲'static'。 – StaxMan