JSON Array Problem - PullRequest
       4

JSON Array Problem

0 голосов
/ 01 февраля 2011

Hy!

У меня есть массив JSON с телеканалами, а длина массива равна трем, но после передачи в древовидную карту значение равно только одному.

Пожалуйста, помогите

Код:

try
            {

                JSONObject menuobj = this.getJSONObject("responseData");
                Log.e("XXX", menuobj.toString());
                JSONArray array = menuobj.getJSONArray("countries");
                TreeMap<String, Integer> map = new TreeMap<String, Integer>();
                for (int i = 0; i < array.length(); i++)
                {
                    JSONObject obj = new JSONObject();
                    obj = array.getJSONObject(i);
                    if (obj.getString("name").equals(country))
                    {
                        Log.e("XXX2", obj.toString());
                        JSONArray arr = obj.getJSONArray("channels");
                        Log.e("XXX3", String.valueOf(arr.length()));
                        for (int j = 0; j < arr.length(); j++)
                        {
                            JSONObject obj2 = new JSONObject();
                            obj2 = arr.getJSONObject(i);
                            map.put(obj2.getString("name"), obj2.getInt("id"));
                        }
                        Log.e("XXX4", String.valueOf(map.size()));
                        return map;
                    }


                }

LogCat:

02-01 18:24:20.277: ERROR/XXX(3784): {"countries":[{"id":"1","channels":[{"id":"3","name":"ARD"},{"id":"1","name":"ORF 1"},{"id":"2","name":"ORF 2"}],"name":"Ã?sterreich"},{"id":"2","channels":[{"id":"3","name":"ARD"}],"name":"Deutschland"}]}
02-01 18:24:20.288: ERROR/XXX2(3784): {"id":"1","channels":[{"id":"3","name":"ARD"},{"id":"1","name":"ORF 1"},{"id":"2","name":"ORF 2"}],"name":"Ã?sterreich"}
02-01 18:24:20.297: ERROR/XXX3(3784): 3
02-01 18:24:20.307: ERROR/XXX4(3784): 1

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

Я верю:

obj2 = arr.getJSONObject(i);

должно быть

obj2 = arr.getJSONObject(j);

Таким образом, вы трижды помещаете одну и ту же пару объектов ключ / значение на карту.

0 голосов
/ 01 февраля 2011

Вам не хватает важной детали регистрации, назовите ее XXX3.5.Это почти наверняка тот случай, когда карта содержит один элемент, потому что каждый вызов map.put() передает ключ, который считается равным ключу, уже находящемуся внутри карты.

Теперь я ожидал, что эти ключи будутСтроковые имена каналов, которые различны, поэтому ясно, что это ожидание не соответствует действительности.Добавление в журнал сообщения obj2.getString("name") (или, альтернативно, установка там точки останова), позволит вам увидеть, какие ключи карты на самом деле и почему последующие вызовы перезаписывают существующее отображение.Вывод фактического класса объекта также был бы полезен, чтобы различать фактический String и некоторый класс, который просто содержит String.

Если элементы выглядят разумными, проблема может быть ошибочным определениемequals() в рассматриваемом классе, который приравнивает элементы, которые должны казаться различными.В любом случае, лучшее ведение журнала покажет, почему

arr.getJSONObject(0).getString("name").equals(arr.getJSONObject(1).getString("name")

возвращает true, если вы ожидаете, что это вернет false.

0 голосов
/ 01 февраля 2011

Вам нужно использовать JSONArray без JSONObject:

 JSONArray resultJson = new JSONArray(responseDataString);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...