Spring for android:如何用不同的参数解析Json对象

时间:2013-08-19 09:48:52

标签: android json spring

我跟随Json:

"geometries": [
                {
                    "type": "Polygon",
                    "coordinates": [
                        [
                            [
                                4.8979805,
                                52.3798389
                            ],
                            [
                                4.8982922,
                                52.3801447
                            ],
                            [
                                4.9027811,
                                52.378504
                            ]
                        ]
                    ]
                },
                {
                    "type": "Point",
                    "coordinates": [
                        4.7622823,
                        52.3095072
                    ]
                },
                {
                    "type": "Polygon",
                    "coordinates": [
                        [
                            [
                                4.4665891,
                                51.9253793
                            ],
                            [
                                4.4700603,
                                51.926059
                            ],
                            [
                                4.4707517,
                                51.9247593
                            ],
                            [
                                4.4706054,
                                51.9247303
                            ]
                        ]
                    ]
                }
            ]
        }

哪个可以PolygonsPoints。我使用spring for android来解析Json。 但是因为geometries有不同的coordinates类型(双重数组数组的数组,只是double数组),我不知道该怎么做。

Json如果来自外部来源,那么就无法做很多事情。

任何人都可以帮助我吗?

提前致谢

2 个答案:

答案 0 :(得分:0)

您可以检查与键coordinates

关联的值的类型

根据值的类型,您可以决定行为。

您可以使用instanceof

检查类型

所以在你的情况下,你可以像这样检查 - >

if(object instanceof List) {
 //Array of Array of Array of Double
} else if(object instance of Map) {
 //Array of Double   
}

您可以使用此代码 -

Map<String, Object> jsonMap = gson.formJson(jsonStr, Map.class);
List<Map<String, Object>> list = jsonMap.get("geometries");
foreach(Map<String, Object> map : list) {
 List<Object> objList = map.get("coordinates");
 foreach(Object obj : objList) {
  if(obj instanceof List) {
   //obj is Array of Double
  } else if(obj instace of Double){
   //obj is Double/Actual value
  }
 }
}

答案 1 :(得分:0)

您可以将坐标定义为;在使用坐标之前(即在getter方法中)List<Object> coordinates;之后,您可以检查是否对其进行后期处理,在后期处理中您可以进一步执行。

我想这会对你有帮助

class MyClass {
    Geometry geometries[];

    Geometry[] getGeometries() {
        return geometries;
    }

    void setGeometries(Geometry[] geometries) {
        this.geometries = geometries;
    }
}
class Geometry {
    String type;
    List<Object> coordinates;

    String getType() {
        return type;
    }

    void setType(String type) {
        this.type = type;
    }

    List<Object> getCoordinates() {
        return coordinates; // you can simply return something more advanced such like List<CoordinateInterface> 
    }

    void setCoordinates(List<Object> coordinates) {
        this.coordinates = coordinates;
    }
}