2016-12-20 1 views
2

У меня есть JSONObjectКак конвертировать JSONObject на новую карту для всех его ключей с использованием итератора Java

{"2016":{"12":{"20":{"19":{"DonationTime":11111111111,"Donation":10}}}}} 

Я хочу, чтобы преобразовать его в новую карту с каждой клавиши

int i = 0; 
for (Iterator<String> keysItr = object.keySet().iterator(); keysItr.`hasNext(); i++) { 
      String key = keysItr.next(); 
      Object value = object.get(key); 

      if(value instanceof JSONObject) { 
       value = toMap((JSONObject) value); 

       map.put(key, value); 
      } 

     } 

     SOP(map); //but here i want to get 4 maps 
    } 

Я хочу, чтобы получить 4 карты, такие как

hourMap[19] = "{"DonationTime":11111111111,"Donation":10}"; 
dayMap[20] = "{"19":{"DonationTime":11111111111,"Donation":10}}"; 
monthMap[12] = "{"12":{"20":{"19":{"DonationTime":11111111111,"Donation":10}}}"; 
yearMap[2016] = "{"12":{"20":{"19":{"DonationTime":11111111111,"Donation":10}}}"; 

Я использую цикл while, но я не могу получить добавочное значение для i.

ответ

4

Ну и можно просто преобразовать объект JSON в карту, а затем оттуда и можно легко вынуть четыре карты у заинтересованных в

Вот простой пример

(следите код ниже на большой JSON график может привести к U некоторые проблемы, так как это на основе преобразования рекурсии)

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.*; 

public class JsonMapConverter { 

public static void main(String... x) throws Exception { 

    String jsonString = "{\"2016\":{\"12\":{\"20\":{\"19\":{\"DonationTime\":11111111111,\"Donation\":10}}}}}"; 
    JSONObject json = new JSONObject(jsonString); 
    Map<String,Object> yearMap = toMap(json); 

    String year = yearMap.keySet().iterator().next(); 
    Map<String,Object> monthMap = ((Map<String, Object>) yearMap.get(year)); 

    String month = monthMap.keySet().iterator().next(); 
    Map<String,Object> dayMap = (Map<String, Object>) monthMap.get(month); 

    String day = dayMap.keySet().iterator().next(); 
    Map<String,Object> hourMap = (Map<String, Object>) dayMap.get(day); 

    System.out.println(yearMap); 
    System.out.println(monthMap); 
    System.out.println(dayMap); 
    System.out.println(hourMap); 
} 

public static Map<String, Object> toMap(JSONObject object) throws JSONException { 
    Map<String, Object> map = new HashMap<String, Object>(); 

    Iterator<String> keysItr = object.keys(); 
    while(keysItr.hasNext()) { 
     String key = keysItr.next(); 
     Object value = object.get(key); 

     if(value instanceof JSONArray) { 
      value = toList((JSONArray) value); 
     } 

     else if(value instanceof JSONObject) { 
      value = toMap((JSONObject) value); 
     } 
     map.put(key, value); 
    } 
    return map; 
} 

public static List<Object> toList(JSONArray array) throws JSONException { 
    List<Object> list = new ArrayList<Object>(); 
    for(int i = 0; i < array.length(); i++) { 
     Object value = array.get(i); 
     if(value instanceof JSONArray) { 
      value = toList((JSONArray) value); 
     } 

     else if(value instanceof JSONObject) { 
      value = toMap((JSONObject) value); 
     } 
     list.add(value); 
    } 
    return list; 
    } 
} 

для JSON на карту преобразования я использовать код из этого ответа (Convert a JSON String to a HashMap)

код был написан на основе строки json, u может корректировать код в соответствии с вашими потребностями в течение нескольких лет, месяцев и дней в json

+0

Спасибо, человек ... очень полезно – deadpool

+0

Спасибо Shadi. Ваш ответ тоже помог мне! – NancySchorr

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