[英]Jackson Object mapping approach with Linkedin Rest API
在處理Linkedin Rest API時,很多字段的格式如下:
"positions":
{
"_total": 1,
"values": [{"title": "Software Developer"}]
}
代替:
"positions":
{
[{"title": "Software Developer"}]
}
當我嘗試將json映射到Position對象時,這會導致很多麻煩。 我正在使用Java與Jackson來解析JSON響應。 有沒有辦法設置對象映射器,以便它會自動忽略“_total”和“values”字段?
我認為不可能將ObjectMapper配置為自動執行此操作。
您可以嘗試編寫自己的解析器,這些內容如下:
JsonFactory f = new JsonFactory();
JsonParser jp = f.createJsonParser(new File("positions.json"));
List<Position> positions = new LinkedList<Position>();
jp.nextToken(); // will return JsonToken.START_OBJECT (verify?)
while (jp.nextToken() != JsonToken.END_OBJECT) {
String fieldname = jp.getCurrentName();
jp.nextToken(); // move to value, or START_OBJECT/START_ARRAY
if ("positions".equals(fieldname)) { // contains an object
Position pos = new Position();
while (jp.nextToken() != JsonToken.END_OBJECT) {
String namefield = jp.getCurrentName();
jp.nextToken(); // move to value
if ("value".equals(namefield)) {
pos.setValue(jp.getText());
}
}
}
jp.close();
顯然@kpentchev為這個問題提供了一個可行的解決方案,但我個人傾向於盡可能避免使用手動解析器。 在這種情況下,我最終編寫了一種包裝類來映射原始json:
public class PositionWrapper
{
private Long _total;
private List<Position> values;
//setter and getter
}
雖然這種方式有點多余,但它避免使用手動包裝器。 對我來說效果很好,即使對於嵌套對象也是如此。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.