Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Linkedin Rest API的Jackson对象映射方法_Java_Jackson_Linkedin - Fatal编程技术网

Java 使用Linkedin Rest API的Jackson对象映射方法

Java 使用Linkedin Rest API的Jackson对象映射方法,java,jackson,linkedin,Java,Jackson,Linkedin,在处理Linkedin Rest API时,许多字段的格式如下: "positions": { "_total": 1, "values": [{"title": "Software Developer"}] } 而不是: "positions": { [{"title": "Software Developer"}] } 当我尝试将json映射到Position对象时,这会造成很多麻烦。我正在使用Java和Jackson来解析JSON响应。是否有一种方法可以设置对象映射器,使

在处理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();
JsonFactory f=newjsonfactory();
JsonParser jp=f.createJsonParser(新文件(“positions.json”);
列表位置=新建LinkedList();
jp.nextToken();//将返回JsonToken.START\u对象(验证?)
while(jp.nextToken()!=JsonToken.END\u对象){
字符串fieldname=jp.getCurrentName();
jp.nextToken();//移动到值或开始\对象/开始\数组
如果(“positions”.equals(fieldname)){//包含对象
位置pos=新位置();
while(jp.nextToken()!=JsonToken.END\u对象){
String namefield=jp.getCurrentName();
jp.nextToken();//移动到值
如果(“值”。等于(名称字段)){
pos.setValue(jp.getText());
} 
}
}
jp.close();

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

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

  //setter and getter
}
公共类位置包装器
{
私人Long_total;
私有列表值;
//接二连三
}

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

这也是我想到的第一件事,但不知何故,我不喜欢存储不必要的总值。