我正在尝试从json文件中获取别名字符串。但是我得到了异常,说别名不是字符串。 org.json.JSONException: JSONObject["alias"] not a string.
String qsCurrentLine;
try {
brq = new BufferedReader(new FileReader("/home/storm/Videos/2.json"));
try {
while ((qsCurrentLine = brq.readLine()) != null) {
//System.out.println(qsCurrentLine);
//reads the line makes it json object
JSONObject question=new JSONObject(qsCurrentLine);
//System.out.println(question);
JSONArray usersarray=question.getJSONArray("users");
//System.out.println(usersarray);
for(int i=0;i<usersarray.length();i++){
JSONObject questions=usersarray.getJSONObject(i);
//System.out.println(questions);
int qus=questions.getInt("id");
//System.out.println(qus);
//String alias=questions.getString("alias");
//String check=questions.getString("answer");
//System.out.println(check);
String check1=questions.getString("question");
//System.out.println(check1);
String check2=questions.getString("_subtype");
//System.out.println(check2);
String check3=questions.getString("_type");
//System.out.println(check3);
String check4=questions.getString("options");
//System.out.println(check4);
System.out.println("HELLO "+questions.getString("alias"));
// System.out.println(check5);
int check6=questions.getInt("id");
System.out.println(check6);
//System.out.println("This alias " +aliass);
}
//JSONObject data25=array.getJSONObject(25);
//System.out.println(data25);
//question1060=data25.getString("question_36__option_10160_");
//System.out.println("the question number of 1060: "+question1060);
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我正在获取所有其他字符串值,但是当我尝试获取别名字符串时,我得到了异常,我不明白为什么?
这是我的json文件的样本。
{"answer":null,"question":"<h1 style=font-family:Lato, sans-serif;font-weight:600;font-size:28px;> Your response to our survey will help us identify how we are serving the needs of different companies.<\/span><\/span>","_subtype":"instructions","_type":"SurveyDecorative","options":"[]","alias":null,"id":73}
即使别名是NULL,它也应该得到空字符串,任何人都可以解释为什么会发生这种情况。
先谢谢
答案 0 :(得分:2)
org.json.JSONObject#getString(String)
抛出JSONException,但是null
。
请参阅代码http://grepcode.com/file/repo1.maven.org/maven2/org.json/json/20080701/org/json/JSONObject.java
public String getString(String key) throws JSONException {
return get(key).toString();
}
其中get是
public Object get(String key) throws JSONException {
Object o = opt(key);
if (o == null) {
throw new JSONException("JSONObject[" + quote(key) +
"] not found.");
}
return o;
}
它只是以这种方式实现,它将在null
上抛出异常。 JSON规范允许null
s,所以它只是一个怪癖。见http://www.json.org/
对于可选值,此包提供方法opt(String)
,例如optString(String)
或optString(String, String)
,请参阅http://www.docjar.com/docs/api/org/json/JSONObject.html
我可能会用
... = questions.getOptString("alias"); //if you want `""` as null value
或
... = questions.getOptString("alias", null); //if you want null
有效地记住,您需要使用getString
和类似的API来获取必需的值和getOptString
以及类似的API以获取可选值。
答案 1 :(得分:1)
你应该检查它是否为空:
String alias = "";
if(!json.isNull("alias")){
alias = json.getString("alias");
} else {
alias = null;
}
如果您不想这样做,那么您可能想要使用不同的json库。
答案 2 :(得分:0)
它正在发生,因为&#34;别名&#34;:null。它并不代表&#34;别名&#34;:&#34; null&#34;或&#34;别名&#34;:&#34;&#34;像那样。它是一个不同的东西,不是一个字符串值。 首先删除此行
System.out.println("HELLO "+questions.getString("alias"));
并获得&#34;别名&#34;的价值键和其他键可以具有null值...
if(!questions.isNull("alias")){ //Returns true if this object has no mapping for name or if it has a mapping whose value is NULL.
String abc = questions.getString("alias");
}
希望这会对你有帮助......