我正在尝试使用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."
},
答案 0 :(得分:2)
在(Map<String, String>) jsonObject.get("properties")
,您正尝试从properties
持有)访问jsonObject
没有此类密钥。您可能希望从features
数组所持有的对象获取该键的值。您已经为该数组创建了迭代器,但您从未使用它来获取它所持有的元素。你需要像
while (iter.hasNext()) {
JSONObject tmpObject = (JSONObject) iter.next();
...
}
并在get("properties")
上致电tmpObject
。