JSON到通用空间Java对象

时间:2013-11-08 00:06:35

标签: java json

有人建议使用库或方法将JSON字符串反序列化为具有Geometry(例如JTS)和属性列表的Java Object吗?

我有几个数据源,我希望能够在地图上查询和显示它们的属性数据。我看到的方法涉及为每种数据类型创建一个特定的Java对象(例如,带有getName(),getDescription()等的AutoBean。我所追求的是能够拥有1个对象而不管属性是什么(因为我不提前知道它们会有很多)

我希望能够说出以下内容:

MyObject o = new MyObject();
o.setGeometry(SomeJsonLibrary.readGeometry(json)); //read Geometry
o.setAttributes(someJsonLibrary.readAttributes(json)); //read all other attributes

欢迎提出任何建议/备选方案。

2 个答案:

答案 0 :(得分:2)

肯定看起来你正在将你的json转换为地图。

顺便说一下,这行可以省略,你可以迭代你的地图,而不必在列表中。

List<Map<String, Object>> features = (List<Map<String, Object>>) mapped.get("features");

我的偏好是Gson(只是我熟悉Gson)。示例代码:

Gson gson=new Gson(); 
String json = "your-json";
Map<String,Object> map=new HashMap<String,Object>();
map=(Map<String,Object>) gson.fromJson(json, map.getClass());

答案 1 :(得分:0)

一种可能性(使用com.fasterxml.jackson.databind.ObjectMapper):

        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> mapped = mapper.readValue(json, Map.class);
        List<Map<String, Object>> features = (List<Map<String, Object>>) mapped.get("features");
        for (Map<String, Object> feature : features) {
            Map<String, Object> attributes = (Map<String, Object>) feature.get("attributes");//for ArcGIS
            Map<String, Object> properties = (Map<String, Object>) feature.get("properties");//for OGC
            Map<String, Object> geometry = (Map<String, Object>) feature.get("geometry");//TODO deserialize geometry
            //do stuff
        }

如果有人有更好的解决方案/建议,请告诉我。