杰克逊对象映射器转换问题与d3js国家JSON



我想使用 Jackson API 从 Github 反序列化此 JSON 列表。

当开始使用数组内的数组时,它会导致异常。任何身体可以帮助学习这个映射.

{
   "type":"Topology",
   "objects":{
      "countries":{
         "bbox":[
            -179.99999999999986,
            -55.52450937299982,
            180.00000000000014,
            83.61347077000005
         ],
         "type":"GeometryCollection",
         "geometries":[
            {
               "type":"Polygon",
               "properties":{
                  "name":"Afghanistan"
               },
               "id":"AFG",
               "arcs":[
                  [
                     0,
                     1,
                     2,
                     3,
                     4,
                     5
                  ]
               ]
            },
            {
               "type":"MultiPolygon",
               "properties":{
                  "name":"Angola"
               },
               "id":"AGO",
               "arcs":[
                  [
                     [
                        6,
                        7,
                        8,
                        9
                     ]
                  ],
                  [
                     [
                        10,
                        11,
                        12
                     ]
                  ]
               ]
            },
            {
               "type":"Polygon",
               "properties":{
                  "name":"Albania"
               },
               "id":"ALB",
               "arcs":[
                  [
                     13,
                     14,
                     15,
                     16,
                     17,
                     18,
                     19,
                     20
                  ]
               ]
            },
            {
               "type":"Polygon",
               "properties":{
                  "name":"Aland"
               },
               "id":"ALD",
               "arcs":[
                  [
                     21
                  ]
               ]
            },
            {
               "type":"Polygon",
               "properties":{
                  "name":"Andorra"
               },
               "id":"AND",
               "arcs":[
                  [
                     22,
                     23
                  ]
               ]
            },
            {
               "type":"Polygon",
               "properties":{
                  "name":"United Arab Emirates"
               },
               "id":"ARE",
               "arcs":[
                  [
                     24,
                     25,
                     26,
                     27,
                     28
                  ]
               ]
            },
....
}

爪哇代码 : Pojo

public class Countries {
    private List<String> type;
    private CountyProperties properties;
    private String id;
    private List<Object> arcs;
    public Countries(List<String> type, CountyProperties properties, String id,
            List<Object> arcs) {
        super();
        this.type = type;
        this.properties = properties;
        this.id = id;
        this.arcs = arcs;
    }
    public List<String> getType() {
        return type;
    }
    public void setType(List<String> type) {
        this.type = type;
    }
    public CountyProperties getProperties() {
        return properties;
    }
    public void setProperties(CountyProperties properties) {
        this.properties = properties;
    }
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
    public List<Object> getArcs() {
        return arcs;
    }
    public void setArcs(List<Object> arcs) {
        this.arcs = arcs;
    }
    public Countries() {
        super();
        // TODO Auto-generated constructor stub
    }
}

还测试类

public class JsonMapperTest {
    @Test
    public void jsonTransformer(){
        ObjectMapper mapper = new ObjectMapper();
        try {
            Countries user = mapper.readValue(new File("countries.json"), Countries.class);
        } catch (JsonParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JsonMappingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

您的POJO结构无效。您可以尝试以下方法:

class RootMap {
    private String type;
    private Objects objects;
    private List<List<List<Integer>>> arcs;
    // getters, setters, other
}
class Objects {
    private Countries countries;
    // getters, setters, other
}
class Countries {
    private String type;
    private List<BigDecimal> bbox;
    private List<Geometry> geometries;
    // getters, setters, other
}
class Geometry {
    private String id;
    private String type;
    private List<Object> arcs;
    // getters, setters
}

上面的结构不包含所有属性(但我相信您将能够添加缺失),因此我们必须启用DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES功能来反序列化我们的JSON。用法示例:

ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
System.out.println(mapper.readValue(json, RootMap.class));

上面的代码打印了我们的POJO对象。

相关内容

  • 没有找到相关文章

最新更新