我无法在我的应用程序中读取我的JSON

时间:2016-04-29 07:11:58

标签: java android json

其实我想在Android中为医疗应用制作MCQ!所以我想从我的数据库中得到问题和我可能的选择,但是当我试图让我的问题选择他时,我有一个问题。我的错误是由JSONException显示的,我不知道为什么:(

我用jsonlint.com查看我的JSON,所以我认为这样就可以了。 这是我的JSON:

{
    "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);

                            }
                        }
                    }

我希望你能帮帮我!

4 个答案:

答案 0 :(得分:2)

并非JSON数据中的每个JSONObject都有“问题”和“choix”键。我很确定你得到了org.json.JSONException: No value for ......

在尝试访问之前,请务必检查是否存在“question”或“choix”参数。

修改

要进行检查,您可以使用JSONObject.has(String parameter)JSONObject.isNull(String parameter)方法。链接:http://developer.android.com/reference/org/json/JSONObject.html#has(java.lang.String)

答案 1 :(得分:0)

我建议您更改JSON的结构。拥有问题的JSONObject和选择的JSONArray。如果您仍想继续执行当前的实施,仍然取决于您。您可以尝试使用的是JSON.optString()。它将返回一个值,具体取决于键是否存在,否则它将返回一个空字符串。根据其描述:

  

返回按名称映射的值(如果存在),必要时强制转换,如果不存在此映射,则返回空字符串。

像这样使用它,改变你的:

String choix = obj.getString("choix");

String choix = obj.optString("choix");

它应该工作。你可以做得更好。

答案 2 :(得分:0)

正确答案是,首先从服务器获得响应,将其解析/转换为JSONObject,如

 JSONObject rootObject = new JSONObject (response.toString());

然后按照您的JSON解析进行操作。这肯定会有。

 JSONObject lesQuestions = rootObject.getJSONObject("QCM");

答案 3 :(得分:0)

Android JSON解析器提供了另一种可选方法,该方法以&#34; opt&#34;开头。与以&#34; get&#34;开头的方法相比较。 opt的重要性在于,它会返回NULL结果而不是throwexception

E.g:

如果obj.getString("question");没有值为&#34; throw的关键字,则{p> exceptionJSON question。&#34;

然而,

如果String s = obj.optString("question");没有值为&#34的关键字,则

throw exception JSON question }&#34 ;.您的结果字符串只是NULL

我发现opt方法非常方便,而不是get throws的{​​{1}}方法。