下面的代码不能正常工作请告诉我什么是错的,当我运行它时我得到一个空指针异常:
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class WeatherAttribParser {
public static void main(String[] args) {
JSONParser parser = new JSONParser();
try{
Object obj = parser.parse(new FileReader("D:/New folder/Severe Weather Assignment/accuweather_2016-03-24-120000.00.json"));
JSONObject jsonobj = (JSONObject) obj;
JSONObject newjsobj = (JSONObject) jsonobj.get("attributes");
String MaxColdRiskLev = (String) newjsobj.get("MaxColdRiskLev");
System.out.println(MaxColdRiskLev);
}catch (Exception ex) {
ex.printStackTrace();
}
}
}
以下是JSON文件:
{
"attributes": {
"MaxColdRiskLev": 0,
}
}
以下是不同类别的制定者和吸气者:
public class JsonAttributes {
private int MaxColdRiskLev;
public int getMaxColdRiskLev ()
{
return MaxColdRiskLev;
}
public void setMaxColdRiskLev (int MaxColdRiskLev)
{
this.MaxColdRiskLev = MaxColdRiskLev;
}
}
打印变量名时,我得到null。我在这里失踪的是什么?请告诉我。
答案 0 :(得分:1)
这对我有用:
Object obj = parser.parse(new FileReader("D:/New folder/Severe Weather Assignment/accuweather_2016-03-24-120000.00.json"));
JSONObject jsonobj = (JSONObject) obj;
JSONObject newjsobj = (JSONObject) jsonobj.get("attributes");
String MaxColdRiskLev = (String) newjsobj.get("MaxColdRiskLev");
主要问题是jsonobj.get()
仅适用于顶级元素,但在您的情况下,“MaxColdRiskLev”是“属性”的子级,因此您需要创建一个中级JSONObject
。
答案 1 :(得分:0)
问题在于你的json格式。字符串MaxColdRiskLev
位于attributes
。
首先,您必须在attributes
中获取嵌套对象,然后检索值MaxColdRiskLev
。
将您的代码修改为类似的内容:
public static void main(String[] args) {
JSONParser parser = new JSONParser();
try{
Object obj = parser.parse(new FileReader("D:/New folder/Severe Weather Assignment/accuweather_2016-03-24-120000.00.json"));
JSONObject jObj = new JSONObject(jsonobj.getString("attributes"));
String MaxColdRiskLev = (String) jObj.get("MaxColdRiskLev");
System.out.println( MaxColdRiskLev);
} catch (Exception ex) {
ex.printStackTrace();
}