簡體   English   中英

使用Linkedin Rest API進行Jackson對象映射方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM