Вам придется перебирать массив. Предположим, JSONArray
для ежевики работает как Java-эквивалент (или это Java?):
for(int i = 0; i < ja.size(); i++) {
JSONObject inner = ja.get(i);
}
Что касается самого JSON, я бы сказал, что можно ожидать, что «жанры» будут множеством жанров. Теперь это массив жанров + объект, содержащий количество жанров. Это сработает, и я думаю, что в какой-то момент прелесть JSON в том, что вы можете делать с ним все, что хотите, но это довольно непредсказуемо, и вам придется изменить свой код, чтобы приспособить его. Например, в моем примере выше вы должны начинать не с i = 0
, а с i = 1
, чтобы перейти непосредственно к реальным жанрам. Но я бы предпочел изменить JSON следующим образом:
{"total_genres":"2", "genres":[{"genre":[{"code":"CTY","name":"Country"}]},{"genre":[{"code":"HOP","name":"Hip Hop / R&B"}]}]}
Теперь рассмотрим ваши отдельные жанры. «Жанры» - это массив объектов. Каждый объект имеет только одно свойство «жанр», которое само по себе содержит массив. Каждый массив содержит только один элемент, который является объектом, содержащим код и имя. Это кажется мне избыточной упаковкой. Чтобы извлечь код и имя, вам нужно сделать что-то вроде этого:
for(int i = 1; i < ja.size(); i++) {
JSONObject inner = ja.get(i);
JSONArray innerArray = inner.getJSONArray("genre");
JSONObject evenFurtherInner = innerArray.get(0);
String code = evenFurtherInner.getString("code");
}
Но я бы предпочел не использовать этот подход вообще. Было бы намного чище, если бы вы могли изменить свой JSON следующим образом:
{"total_genres":"2", "genres":[{"code":"CTY","name":"Country"},{"code":"HOP","name":"Hip Hop / R&B"}]}
Тогда вы могли бы сделать
for(int i = 0; i < ja.size(); i++) {
JSONObject genre = ja.get(i);
String code = genre.getString("code");
}
Обратите внимание на использование ja.size()
. Поскольку все ваши жанры находятся в массиве, вы можете просто проверить размер массива, а не добавлять дополнительный счетчик в возвращаемый код. Таким образом, вы можете еще больше уменьшить JSON для лучшей читабельности:
{"genres":[{"code":"CTY","name":"Country"},{"code":"HOP","name":"Hip Hop / R&B"}]}