使用Map的Java中的JSON解析器

时间:2018-02-06 17:22:49

标签: java json parsing maping

我正在尝试使用org.json.simple库解析json文件,当我尝试使用Map实例化迭代器时,我得到空指针异常。

@SuppressWarnings("unchecked")
public static void main(String[] args) {

    JSONParser parser = new JSONParser();

    try {

        Object obj = parser.parse(new FileReader("wadingpools.json"));

        JSONObject jsonObject = (JSONObject) obj;
        System.out.println(jsonObject);

        JSONArray featuresArray = (JSONArray) jsonObject.get("features");
        Iterator iter = featuresArray.iterator();

        while (iter.hasNext()) {
            Map<String, String> propertiesMap = ((Map<String, String>) jsonObject.get("properties"));
            Iterator<Map.Entry<String, String>> itrMap = propertiesMap.entrySet().iterator();
            while(itrMap.hasNext()){
                Map.Entry<String, String> pair = itrMap.next();
                System.out.println(pair.getKey() + " : " + pair.getValue());
            }
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (ParseException e) {
        e.printStackTrace();
    }

}

}

以下是JSON文件的一部分。我正在尝试在属性对象中获取NAME。

{
    "type": "FeatureCollection",
    "crs": {
        "type": "name",
        "properties": {
            "name": "urn:ogc:def:crs:OGC:1.3:CRS84"
        }
    },
    "features": [{
            "type": "Feature",
            "properties": {
                "PARK_ID": 393,
                "FACILITYID": 26249,
                "NAME": "Wading Pool - Crestview",
                "NAME_FR": "Pataugeoire - Crestview",
                "ADDRESS": "58 Fieldrow St."
            },

1 个答案:

答案 0 :(得分:2)

(Map<String, String>) jsonObject.get("properties"),您正尝试从对象(由properties持有)访问jsonObject 没有此类密钥。您可能希望从features数组所持有的对象获取该键的值。您已经为该数组创建了迭代器,但您从未使用它来获取它所持有的元素。你需要像

这样的东西
while (iter.hasNext()) {
    JSONObject tmpObject = (JSONObject) iter.next();
    ...
}

并在get("properties")上致电tmpObject