2015-06-11 2 views
1

я использую org.json библиотеку и пытаюсь создать JSON объект stops в простой форме, как показано ниже, но я всегда получаю все timeEntries в том же JSONArray timeArray и имя всегда изменяется в упорах как в current outputПолучить JSONObject в правильном порядке

Токовый выход:

{"arrival_time": 
       {"mon-fri":[ 
           ["04:48","05:18","05:46","06:16"], 
           ["04:52","05:22","05:50","06:20"], 
           ["04:57","05:27","05:56","06:26"] 
          ] 
       }, 
"stops_name":"third name"} 

Код:

ArrayList<String> result = new ArrayList<String>(); 
    JSONObject stops = new JSONObject(); 
    JSONObject arrivals = new JSONObject(); 
    JSONArray arrivalMoFr = new JSONArray(); 

    for (Entry<String, List<String>> entry : map.entrySet()) { 
     String name = entry.getKey(); 
     List<String> timeEntries = entry.getValue();       
     try {      
     stops.put("stops_name", name); 

     JSONArray timeArray = new JSONArray(timeEntries); 
     arrivalMoFr.put(timeArray); 

     arrivals.put("mon-fri", arrivalMoFr); 

     stops.put("arrival_time", arrivals); 

     System.out.println(stops.toString(3)); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

Простой, как следует результат, как

{"arrival_time": 
       {"mon-fri":["04:48","05:18","05:46","06:16"] 

       } 
"stops_name":"first name"}, 
{"arrival_time": 
       {"mon-fri":["04:52","05:22","05:50","06:20"] 

       } 
"stops_name":"second name"}, 
{"arrival_time": 
       {"mon-fri":["04:57","05:27", "05:56","06:26"] 

       } 
"stops_name":"third name"} 
+0

Какой у вас вход json? –

+0

Быстрый взгляд предполагает, что вы должны перенести декларацию '' '' '' '' '' '' '' '' '' 'прибытия и инициализации внутри цикла for. Это должно сработать. – Codebender

ответ

3

Имейте в виду, что вы хотите массив как корневой объект. Вам придется создавать другой массив и объекты несколько раз, поэтому инициализация их вне цикла for не полезна.

ArrayList<String> result = new ArrayList<String>(); 
JSONArray stops = new JSONArray(); 

for (Entry<String, List<String>> entry : map.entrySet()) { 
    String name = entry.getKey(); 
    List<String> timeEntries = entry.getValue();       
    try { 
     JSONObject stop = new JSONObject();      
     stop.put("stops_name", name); 

     JSONArray timeArray = new JSONArray(timeEntries); 
     //arrivalMoFr.put(timeArray); 

     JSONObject arrivals = new JSONObject(); 
     arrivals.put("mon-fri", timeArray); 

     stop.put("arrival_time", arrivals); 
     stops.put(stop); 

     //System.out.println(stops.toString(3)); 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Почему я получаю браки twise '" arrival_time ": {" mon-fri ": [[' а также в конце JSONArray тоже? – TheBook

+0

Вам тогда не нужен 'прибытиеMoFr' - вы можете напрямую использовать' timeArray' в 'заездах'. Я обновлю ответ позже. – Glorfindel

+0

и в этой 'stops.add (stop);' строка здесь он вызывает put и не добавляет? – TheBook

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