0

在处理 Linkedin Rest API 时,很多字段的格式如下:

"positions":
{
  "_total": 1,
  "values": [{"title": "Software Developer"}]
}

代替:

"positions":
{
  [{"title": "Software Developer"}] 
}

当我尝试将 json 映射到 Position 对象时,这会导致很多麻烦。我正在使用 Java 和 Jackson 来解析 JSON 响应。有没有办法设置对象映射器,使其自动忽略“_total”和“values”字段?

4

2 回答 2

1

显然@kpentchev 为这个问题提供了一个可行的解决方案,但我个人倾向于尽可能避免手动解析器。在这种情况下,我最终编写了一种包装类来映射原始 json:

public class PositionWrapper
{
  private Long _total;
  private List<Position> values;

  //setter and getter
}

虽然这种方式有点多余,但它避免了使用手动包装器。对我来说效果很好,即使是嵌套对象。

于 2012-08-08T02:51:34.723 回答
1

我认为不可能将 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();
于 2012-08-07T17:20:50.063 回答