如何使用迭代器将JSONObject转换为新的Map,以包含其所有的键

16 浏览
0 Comments

如何使用迭代器将JSONObject转换为新的Map,以包含其所有的键

我有一个JSONObject

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

我想将其转换为一个新的map,并且每个键都有一个递增的值

int i = 0;
for (Iterator 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);   //但是我想要得到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值。

0
0 Comments

问题的原因是需要将一个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);
        Map yearMap = 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 toList(JSONArray array) throws JSONException {
        List list = new ArrayList();
        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对象转换成Map对象,并且可以获取所有的key和对应的value。可以根据需要进行进一步的处理和操作。

0