2015-02-25 3 views
1

Я пытаюсь преобразовать данные JSON, которые возвращаются к массиву, поэтому я могу использовать данные в спискеView.не может использовать JSONObject для JSONArray

Я получил следующий код:

JSONObject jsonobject; 
jsonobject = JSONFunctions.getJSONfromURL("example/url"); 

ArrayList<String> list = new ArrayList<String>(); 
JSONArray jsonArray = (JSONArray)jsonobject; 
if (jsonArray != null) { 
    //do something with it 
} 

Примечание: У меня нет никакого опыта работы с Java.
Метод getJSONfromURL возвращает JSON данного URL, который работает просто отлично, но ошибка находится в JSONArray jsonArray = (JSONArray)jsonobject;

Это дает следующее сообщение об ошибке: не может бросить JSONObject к JSONArray Я также попытался это: JSONArray jsonArray = (JSONObject)(JSONArray)jsonobject;

Я не могу понять, что я делаю неправильно.

Так как я могу отбросить свой jsonobject к нормальному массиву, который я могу использовать в качестве данных для своего спискаView?

+1

Какие библиотеки вы используете? – xehpuk

+0

org.json Я думаю, – Bas

+0

Я бы посмотрел на JSON, который вы возвращаетесь с URL-адреса (и отправляйте его здесь, если можете). Вы уверены, что это массив? Вообще говоря, возвращение массива верхнего уровня считается уязвимостью безопасности. –

ответ

0

JSONObject - это как карта в java. Пара ключ-значение. Таким образом, вы должны повторять как итерация Карту:

Iterator iterator = jsonobject.keys(); 
JSONArray jsonArray = new JSONArray(); 

while (iterator.hasNext()){ 
    String key = (String) iterator.next(); // assuming the key to be a String 
    // You can put the key also if you want. But, It does not make any sense to do so. 
    jsonArray.put(jsonobject.get(key)); 
} 
1

JSONObject отличается от JSONArray. Если вы попробуете new JSONObject("['test', 'array']"), вы получите JSONException: A JSONObject text must begin with '{' at 1 [character 2 line 1].

Попробуйте работает ли это для вас:

static JSONArray fromUrl(URL url) throws IOException { 
    try (
     InputStream openStream = url.openStream(); 
     BufferedInputStream bis = new BufferedInputStream(openStream); 
     Scanner scanner = new Scanner(bis, StandardCharsets.UTF_8.name()); 
    ) { 
     if (!scanner.useDelimiter("\\A").hasNext()) { 
      throw new EOFException("empty response"); 
     } 
     return new JSONArray(scanner.next()); 
    } 
} 
+0

Спасибо за ваш ответ, но ваш код выдает ошибку на последней строке, возвращает новый JSONArray. Ошибка: Необработанное исключение: JSONException – Bas

+0

@Bas В источниках, которые я загрузил (https://github.com/douglascrockford/JSON-java/blob/master/JSONException.java), его не нужно обрабатывать, потому что он расширяет RuntimeException '. Затем вам нужно обработать исключение, добавив предложение 'catch' или объявив его брошенным, поместив его в' throws'-clause ('throws IOException, JSONException'). Но это базовые знания Java, которые вы обязательно должны приобрести. – xehpuk

Смежные вопросы