Java 我能';我无法在应用程序中读取JSON
事实上,我想在Android中为医疗应用程序制作一个MCQ!所以我想从我的数据库中获取问题和可能的选择,但当我试图获取我的问题和选择时,我遇到了一个问题。JSONException显示了我的错误,我不知道为什么:( 我用jsonlint.com检查我的JSON,所以我认为这没问题。 这是我的JSON:Java 我能';我无法在应用程序中读取JSON,java,android,json,Java,Android,Json,事实上,我想在Android中为医疗应用程序制作一个MCQ!所以我想从我的数据库中获取问题和可能的选择,但当我试图获取我的问题和选择时,我遇到了一个问题。JSONException显示了我的错误,我不知道为什么:( 我用jsonlint.com检查我的JSON,所以我认为这没问题。 这是我的JSON: { "QCM": { "1": { "question": "Est-ce que Captain America gagne contre Iro
{
"QCM": {
"1": {
"question": "Est-ce que Captain America gagne contre IronMan",
"id": "31"
},
"2": {
"choix": "Oui"
},
"3": {
"choix": "Non"
}
}
}
这是我的Android应用程序中的JAVA
try {
JSONObject lesQuestions = response.getJSONObject("QCM");
Iterator<?> keys = lesQuestions.keys();
while(keys.hasNext()) {
String key = (String) keys.next();
if (lesQuestions.get(key) instanceof JSONObject) {
JSONObject obj = (JSONObject) lesQuestions.get(key);
String signesCliniques = obj.getString("question");
String choix = obj.getString("choix");
lesChoixButton.setText(choix);
symptomesQuestions.setText(signesCliniques);
}
}
}
试试看{
JSONObject lesQuestions=response.getJSONObject(“QCM”);
迭代器keys=lesQuestions.keys();
while(keys.hasNext()){
字符串键=(字符串)键。下一步();
if(lesQuestions.get(key)JSONObject实例){
JSONObject obj=(JSONObject)lesQuestions.get(key);
String signesCliniques=obj.getString(“问题”);
String choix=obj.getString(“choix”);
lesChoixButton.setText(choix);
症状问题。setText(签名临床);
}
}
}
我希望你能帮助我!不是每个JSON数据中的
JSONObject
都有“疑问”和“choix”键。我很确定你得到的是org.JSON.JSONException:No value for…
在尝试访问之前,请确保检查是否存在“问题”或“choix”参数
编辑:
要检查,您可以使用
JSONObject.has(字符串参数)
或JSONObject.isNull(字符串参数)
方法。链接:并非JSON数据中的每个JSONObject
都有“问题”和“选择”键。我很确定您得到的是org.JSON.JSONException:No value for…
在尝试访问之前,请确保检查是否存在“问题”或“choix”参数
编辑:
要进行检查,可以使用
JSONObject.has(字符串参数)
或JSONObject.isNull(字符串参数)
method.Link:我建议更改JSON的结构。有一个JSONObject作为问题,有一个JSONArray作为选择。如果您仍然想继续当前的实现,则仍由您决定。您可以尝试使用的是。它将返回一个值,具体取决于键是否存在,否则它将返回一个空string.根据其说明:
如果存在按名称映射的值,则返回该值;如果不存在此类映射,则返回空字符串
像这样使用,更改您的:
String choix = obj.getString("choix");
到
它应该可以工作。不过你可以做得更好。我建议你改变JSON的结构。有一个JSONObject作为问题,有一个JSONArray作为选择。如果你仍然想继续当前的实现,这仍然取决于你。你可以尝试使用的是。它将返回一个值,这取决于键是否存在,否则我会t将返回一个空字符串。根据其说明: 如果存在按名称映射的值,则返回该值;如果不存在此类映射,则返回空字符串 像这样使用,更改您的:
String choix = obj.getString("choix");
到
它应该可以工作。不过你可以做得更好。正确的答案是,首先当你从服务器收到响应时,将其解析/转换为JSONObject
JSONObject rootObject = new JSONObject (response.toString());
然后按照您正在进行的JSON解析进行操作。这是肯定的
JSONObject lesQuestions = rootObject.getJSONObject("QCM");
正确的答案是,首先当您从服务器获得响应时,将其解析/转换为JSONObject,如
JSONObject rootObject = new JSONObject (response.toString());
然后按照您正在进行的JSON解析进行操作。这是肯定的
JSONObject lesQuestions = rootObject.getJSONObject("QCM");
与以“
get
”开头的方法相比,AndroidJSON
解析器提供了另一个以“opt
”开头的可选方法。opt
的意义在于,它将返回一个NULL
结果,而不是抛出一个异常
例如:
obj.getString(“问题”);
如果JSON
没有值为“question
”的键,则将抛出异常
但是,
String s=obj.optString(“问题”);
将不抛出异常,如果JSON
没有值为“question
”的键。您的结果字符串将是NULL
我发现opt
方法非常方便,而不是get
方法,后者抛出异常
AndroidJSON
解析器提供了另一种可选方法,与以“get
开头的方法相比,它以“opt
”开头“opt
的意义在于,它将返回一个NULL
结果,而不是抛出一个异常
例如:
obj.getString(“问题”);
如果JSON
没有值为“question
”的键,则将抛出异常
但是,
String s=obj.optString(“问题”);
将不抛出异常,如果JSON
没有值为“question
”的键。您的结果字符串将是NULL
我觉得opt
方法非常方便,而不是get
方法抛出异常
异常是什么?你能发布日志吗?你调试了吗?lesQuestions中的内容是什么?哦,对不起,只是说“org.json.JSONException:No Value For choix”。我不知道如何使用调试:/u你有一个好的教程吗^^?看起来你应该使用response.getJSONArray(“QCM”);
而不是response.getJSONObjec