Исключение разбора JSON в Android

У меня следующая проблема: у меня есть файл JSON на сервере, который я пытаюсь проанализировать в Android. Но я получаю следующее сообщение об ошибке:

06-13 19:24:39.025: E/JSON Parser(17169): ошибка анализа данных org.json.JSONException: значение  типа java.lang.String не может быть преобразовано в JSONObject

Вот мой файл JSON:

    {
"settings":[
  {
     "rss":"true",
     "rss_feed":"http://test.com/rss.rss"
  }
],
 "map_locations":[
  {
     "title":"Büro Toronto",
     "address":"123 Younge Street Toronto"
  },
  {
     "title":"Büro New York",
     "address":"Time Square New York"
  }
]
}

И это мой код:

        JSONParser jParser = new JSONParser();

        JSONObject json = jParser.getJSONFromUrl(SETTINGS_URL);

        try {
            JSONObject c = json.getJSONArray("settings").getJSONObject(0);

            rss = c.getBoolean("rss");

            JSONArray jMap = json.getJSONArray("map_locations");
            for (int i = 0; i < jMap.length(); i++) {
                JSONObject c2 = jMap.getJSONObject(i);

                String map_title = c2.getString("title");
                String map_address = c2.getString("address");

                mapListTitle.add(map_title);
                mapListAddress.add(map_address);
            }

            URL_TO_RSSFEED = c.getString("rss_feed");
        } catch (JSONException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }

Спасибо за любую помощь заранее!

Странно то, что я ничего не менял (насколько я знаю) и раньше все работало. Если вам нужна дополнительная информация, дайте мне знать!


person user754730    schedule 13.06.2012    source источник
comment
Что именно ты имеешь ввиду? Например, проблемы с UTF-8 или что-то в этом роде? Я также пробовал с ue вместо ü, но это ничего не изменило...   -  person user754730    schedule 13.06.2012
comment
@user754730 user754730: вы можете проверить, является ли возврат json по API действительным или нет здесь jsonviewer.stack.hu   -  person ρяσѕρєя K    schedule 13.06.2012
comment
JSON на самом деле выглядит нормально на веб-сайте...   -  person user754730    schedule 13.06.2012


Ответы (2)


Вау, хорошо, я нашел ответ ... Пришлось изменить

BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "iso-8859-1"), 8);

to

to BufferedReader reader = new BufferedReader(new InputStreamReader(
                    is, "UTF-8"), 8);

Как ни странно, он работал несколько часов назад с теми же настройками.

Но большое спасибо за вашу помощь!

person user754730    schedule 13.06.2012

Я запустил этот код, и он работает нормально.

String jsonStr = "{\"settings\":[{\"rss\":\"true\",\"rss_feed\":\"http://test.com/rss.rss\"}],\"map_locations\":[{\"title\":\"Büro Toronto\",\"address\":\"123 Younge Street Toronto\""
              +"},{\"title\":\"Büro New York\",\"address\":\"Time Square New York\"}]}";
    try {
    JSONObject json = new JSONObject(jsonStr);


        JSONObject c = json.getJSONArray("settings").getJSONObject(0);

        boolean rss = c.getBoolean("rss");

        JSONArray jMap = json.getJSONArray("map_locations");
        for (int i = 0; i < jMap.length(); i++) {
            JSONObject c2 = jMap.getJSONObject(i);

            String map_title = c2.getString("title");
            String map_address = c2.getString("address");

           /* mapListTitle.add(map_title);
            mapListAddress.add(map_address);*/
        }

       String URL_TO_RSSFEED = c.getString("rss_feed");
    } catch (JSONException e) {
        e.printStackTrace();
    } catch (NullPointerException e) {
        e.printStackTrace();  
}

Поэтому я могу только заключить, что в первом jsonObject, который вы создаете, могут быть некоторые ошибки, и я говорю об этой строке:

JSONObject json = jParser.getJSONFromUrl(SETTINGS_URL);

person Arun George    schedule 13.06.2012
comment
Я предполагаю, что вы можете использовать readJsonFromUrl(String url) из этого сообщения stackoverflow.com/questions/4308554/ , ответ, данный @RolandIllig. Если да, то вы получаете ошибку в этой строке JSONObject json = new JSONObject(jsonText);. - person Arun George; 13.06.2012
comment
Спасибо, это то, что заставило меня заглянуть внутрь моего класса JSONParser. Вы найдете мое решение ниже. - person user754730; 13.06.2012