2015-03-02 3 views
3

Я хочу, чтобы разобрать объект JSON в JSON файл java.The является {"l1":"1","l2":"0","f1":"0","connected":"0","all":"0"} я пытаюсь написать программу Java, чтобы напечатать выше JSON, какКак разобрать Json с помощью Java?

l1=1 
l2=0 
f1=0 
connected=0 
all=0 

Количество записей в файле JSon может быть увеличена, поэтому мне нужно прокрутить json и распечатать все данные. Это то, что я сделал до сих пор.

public class main { 
    public static void main(String[] args){ 
     try{ 
      URL url = new URL("http://localhost/switch.json"); 
      JSONTokener tokener = new JSONTokener(url.openStream()); 
      JSONObject root = new JSONObject(tokener); 
      JSONArray jsonArray = root.names(); 
      if (jsonArray != null) { 
       int len = jsonArray.length(); 
       for (int i=0;i<len;i++){ 
        System.out.println(jsonArray.get(i).toString()); 
       } 
      } 
     }catch (Exception e) { 
      e.printStackTrace(); 
      System.out.println("Error Occured"); 
     } 
    } 
} 

вышеуказанная программа может печатать только первый элемент каждого массива. Но я пытаюсь получить результат, о котором я упоминал в начале. Может кто-нибудь помочь?

+0

Я использую библиотеку от json.org. –

+1

Покажите нам пример такого массива JSON. Прямо сейчас вы разбираете объект, а не массив. Покажите нам код, который вы используете для анализа массива объектов. –

+0

Я просто хочу разобрать это {"l1": "1", "l2": "0", "f1": "0", "connected": "0", "all": "0"}. Я добавил код, используемый в вопросе. –

ответ

4

Простой объект JSON, не массив. Вам нужно перебирать ключи и печать данных:

JSONObject root = new JSONObject(tokener); 
    Iterator<?> keys = root.keys(); 

    while(keys.hasNext()){ 
     String key = (String)keys.next(); 
     System.out.println(key + "=" + root.getString(key)); 
    } 

Пожалуйста, обратите внимание, что выше ключей решение печатает в случайном порядке, в связи с использованием HashMap внутренне. Пожалуйста, обратитесь к this SO question, описывая это поведение.

+0

: может только перебирать массив или любой экземпляр или java.lang.iterable –

+0

Да, исправлено это. не проверял код до – udalmik

+0

Спасибо. Это сработало :) –

4

Ваш JSON-файл не содержит массив - он содержит объект.

JSON массивы заключены в [] скобки; Объекты JSON заключены в скобки {}.

[1, 2, 3]      // array 
{ one:1, two:2, three:3 }  // object 

Ваш код в настоящее время извлекает имена из этого объекта, а затем печатает те из:

JSONObject root = new JSONObject(tokener); 
JSONArray jsonArray = root.names(); 

Вместо прохода над только именами, вы должны использовать имена (ключи) для извлечения каждого значения от объекта:

JSONObject root = new JSONObject(tokener); 
for (Iterator<?> keys= root.keys(); keys.hasNext();){ 
    System.out.println(key + "=" + root.get(keys.next())); 
} 

Обратите внимание, что записи не будут печатать в определенном порядке, потому что JSON objects не упорядочены:

Объект является неупорядоченным набором пар имя/значение - http://json.org/

Смотрите также documentation для класса JSONObject.

+0

ошибка: может только перебирать массив или любой экземпляр или java.lang.iterable –

+1

вы скопировали мою ошибку) – udalmik

+0

Это та же ошибка, но я не видел вашего ответа до тех пор, пока не стал, так что слишком поздно, чтобы этого избежать! Позор библиотеки не реализует Iterable ... – DNA

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