Ошибка синтаксического анализа файла JSON в Android

Я разрабатываю приложение для Android, которое извлекает данные с сервера через HTTP GET, сохраняет ответ (формат JSON) в строке. Я хочу проанализировать строку и получить значения в пределах JSONArray.

Полученный JSON, который хранится в STRING:

{"code":1,"data":{"survey":{"id":null,"questionAnswers":[{"id":null,"min":"1","max":"5","step":"0.1","last":"4.7","text":"I am happy at work today","key":"Mood","testQuestionId":"1","datetime":"2014-04-29 15:47:02","answer":"4.7","testAnswerId":null}]}}

Я хочу проанализировать массив JSON "questionAnswers" и получить значение в "answer", которое находится внутри JSONObject.

Код, который я использовал, выглядит следующим образом:

                JSONObject jsonObj_survey = new JSONObject(Get_MySurvey_JSON);
    JSONObject jsondata_survey = jsonObj_survey.getJSONObject("data");
    JSONArray jsonArray_questionAnswer = jsondata_survey
            .getJSONArray("questionAnswers");

    for (int i = 0; i < jsonArray_questionAnswer.length(); i++) {
        JSONObject questionAnswer = jsonArray_questionAnswer
                .getJSONObject(i);

        my_Company_survey_rating[i] = questionAnswer.getString("answer");
        // userdata.setMy_Company_Top_key_1(my_Company_Top_key[1]);

        Log.d("Rating", my_Company_survey_rating[i]);
    }    

Я не могу разобрать его и получить исключение:

04-29 18:28:00.272: W/System.err(13189): org.json.JSONException: No value for questionAnswers
04-29 18:28:00.272: W/System.err(13189):    at org.json.JSONObject.get(JSONObject.java:354)
04-29 18:28:00.272: W/System.err(13189):    at org.json.JSONObject.getJSONArray(JSONObject.java:548)
04-29 18:28:00.272: W/System.err(13189):    at com.moodwonder.fi.HTTP_SignIn_Thread.doInBackground(HTTP_SignIn_Thread.java:224)
04-29 18:28:00.272: W/System.err(13189):    at com.moodwonder.fi.HTTP_SignIn_Thread.doInBackground(HTTP_SignIn_Thread.java:1)
04-29 18:28:00.272: W/System.err(13189):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
04-29 18:28:00.272: W/System.err(13189):    at java.util.concurrent.FutureTask.run(FutureTask.java:234)
04-29 18:28:00.272: W/System.err(13189):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
04-29 18:28:00.272: W/System.err(13189):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
04-29 18:28:00.272: W/System.err(13189):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
04-29 18:28:00.272: W/System.err(13189):    at java.lang.Thread.run(Thread.java:841)

person Swaminathan Vasanth    schedule 29.04.2014    source источник
comment
поместите свой json здесь jsonviewer.stack.hu, он отображает недопустимый json   -  person PankajAndroid    schedule 29.04.2014
comment
ваши фигурные скобки в JSON не совпадают. У вас есть 4 открытые скобки и только 3 закрытия. Можете ли вы попробовать исправить это и снова попробовать свой код?   -  person Praba    schedule 29.04.2014
comment
stackoverflow.com /questions/23338695/ Вы можете сослаться на тот же код для анализа json на объект ....   -  person Shreeshesh    schedule 29.04.2014


Ответы (2)


Вы пытаетесь получить JSONArray из "questionAnswers" из "data" вместо "опроса".

String yourJSONString = "{"code":1,"data":{"survey":{"id":null,"questionAnswers":[{"id":null,"min":"1","max":"5","step":"0.1","last":"4.7","text":"I am happy at work today","key":"Mood","testQuestionId":"1","datetime":"2014-04-29 15:47:02","answer":"4.7","testAnswerId":null}]}}}";

JSONObject jObj_main = new JSONObject(yourJSONString);
JSONObject jOb_data = jObj_main.getJSONObject("data");
JSONObject jOb_survey = jOb_data.getJSONObject("survey");
JSONArray jArray_questionAnswers = jOb_survey.getJSONArray("questionAnswers");
person Archie.bpgc    schedule 29.04.2014
comment
Спасибо, Арчи. Это сработало. Файл, который я получил с сервера, тоже был частично пуст. Тем не менее исправление работает. - person Swaminathan Vasanth; 29.04.2014

Попробуйте этот код -

  JSONObject jsonObj_survey = new JSONObject(Get_MySurvey_JSON);
                JSONObject jsondata_survey = jsonObj_survey.getJSONObject("data");

                JSONObject jsondata_surveyvalue = jsonObj_survey.getJSONObject("survey");
                JSONArray jsonArray_questionAnswer = jsondata_surveyvalue
                        .getJSONArray("questionAnswers");

                for (int i = 0; i < jsonArray_questionAnswer.length(); i++) {
                    JSONObject questionAnswer = jsonArray_questionAnswer
                            .getJSONObject(i);

                    my_Company_survey_rating[i] = questionAnswer.getString("answer");
                    // userdata.setMy_Company_Top_key_1(my_Company_Top_key[1]);

                    Log.d("Rating", my_Company_survey_rating[i]);

                           }

Надеюсь, этот код поможет вам!! это не работает, пожалуйста, дайте мне знать, я постараюсь помочь больше.

person shweta_jain    schedule 29.04.2014