[英]Deserialize JSON Array with different POJOs in java with Jackson
如何反序列化此JSON結構?
[
{
"page": 1,
"per_page": "50"
},
[
{
"id": "IC.BUS.EASE.XQ",
"name": "ion"
},
{
"id": "OIUPOIUPOIU",
"name": "lal alalalal"
}
]
]
(我是從WorldBank Api那里得到的,這有點簡化了,您可以在此處找到確切的響應)。
問題是,我得到了一個對象數組,其中第一個元素是POJO,第二個元素是特定類型的POJO數組。
我發現反序列化的唯一方法是非常通用,從而生成列表和地圖。
List<Object> indicators = mapper.readValue(jsonString, new TypeReference<List<Object>>() {});
有沒有更好的方法反序列化此JSON以獲取數組或列表,其中第一個元素是對象“ A”,第二個元素是對象列表“ B”?
如果我是你,我會做這樣的事情。 如果不使用公共基類,就不可能在Java的一個列表中以良好的方式表示數據。 在您的情況下,不幸的是Object
。 您可以通過處理響應列表來有所幫助。
ArrayNode arrayNode = (ArrayNode) mapper.readTree(this.getScrape().getScrapetext());
A a = mapper.readValue(arrayNode.get(0), A.class);
arrayNode.remove(0);
List<B> b = mapper.readValue(arrayNode.toString(), new TypeReference<List<B>>()
{
});
鑒於結構相當不規則,因為沒有Java類定義在結構上將JSON數組與具有按索引的元素的魔術類型定義相匹配的Java定義,您可能需要進行兩遍綁定。
首先,您將JSON綁定到List
(或只是Object
)或JsonNode
。 然后,您可以使用ObjectMapper.convertValue()
提取元素並將其轉換為所需的實際類型。 就像是:
JsonNode root = mapper.readTree(jsonSource);
HeaderInfo header = mapper.convertValue(jsonSource.get(0),
HeaderInfo.class);
IdNamePair[] stuff = mapper.convertValue(jsonSource.get(1),
IdNamePair[].class);
可以讓您從原始JSON數組獲取類型化的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.