如何使用迭代器将JSONObject转换为新的Map,以包含其所有的键
如何使用迭代器将JSONObject转换为新的Map,以包含其所有的键
我有一个JSONObject
{"2016":{"12":{"20":{"19":{"DonationTime":11111111111,"Donation":10}}}}}
我想将其转换为一个新的map,并且每个键都有一个递增的值
int i = 0; for (IteratorkeysItr = 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); //但是我想要得到4个map }
我想要得到4个map,分别是:
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}}}";
我正在使用for循环,但是我不能得到递增的i值。
问题的原因是需要将一个JSONObject对象转换成一个新的Map对象,并且需要包含所有的key。解决方法是使用迭代器遍历JSONObject对象的所有key和value,并根据value的类型进行相应的处理。如果value是JSONArray类型,则将其转换成List对象;如果value是JSONObject类型,则递归调用toMap方法将其转换成新的Map对象。最后将key和处理后的value放入新的Map对象中。
具体的实现代码如下:
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); MapyearMap = toMap(json); String year = yearMap.keySet().iterator().next(); Map monthMap = ((Map ) yearMap.get(year)); String month = monthMap.keySet().iterator().next(); Map dayMap = (Map ) monthMap.get(month); String day = dayMap.keySet().iterator().next(); Map hourMap = (Map ) dayMap.get(day); System.out.println(yearMap); System.out.println(monthMap); System.out.println(dayMap); System.out.println(hourMap); } public static Map toMap(JSONObject object) throws JSONException { Map map = new HashMap (); Iterator 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
通过该方法,可以将JSON对象转换成Map对象,并且可以获取所有的key和对应的value。可以根据需要进行进一步的处理和操作。