Java 使用Linkedin Rest API的Jackson对象映射方法
在处理Linkedin Rest API时,许多字段的格式如下: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响应。是否有一种方法可以设置对象映射器,使
"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;
私有列表值;
//接二连三
}
虽然这种方式有点多余,但它避免了使用手动包装器。对我来说效果很好,即使是嵌套对象。这也是我想到的第一件事,但不知何故,我不喜欢存储不必要的总值。