複雜json轉MAP物件
阿新 • • 發佈:2018-12-26
普通json物件或者字串轉換map或者實體就不說了,這裡主要提供複雜json 轉map的方法
複雜json例如:String str="{aaa:test,key:[\"A\",\"B\",\"C\"],val:[\"1111\",\"2222\",\"333\"]}",某些key對應的value包含json陣列
直接上java程式碼了:
public class JsonUtils {
/** *<p>類描述:複雜json字串轉換為Map,包含陣列時value為List。</p> */ public static Map json2Map(String json) { LinkedMap map = new LinkedMap(); JSONObject js = JSONObject.fromObject(json); populate(js, map); return map; } /** *<p>類描述:json中的鍵值對解析成map。</p> */ private static Map populate(JSONObject jsonObject, Map map) { for (Iterator iterator = jsonObject.entrySet().iterator(); iterator .hasNext();) { String entryStr = String.valueOf(iterator.next()); String key = entryStr.substring(0, entryStr.indexOf("=")); String value = entryStr.substring(entryStr.indexOf("=") + 1, entryStr.length()); if (jsonObject.get(key).getClass().equals(JSONObject.class)) { HashMap _map = new HashMap(); map.put(key, _map); populate(jsonObject.getJSONObject(key), ((Map) (_map))); } else if (jsonObject.get(key).getClass().equals(JSONArray.class)) { ArrayList list = new ArrayList(); map.put(key, list); populateArray(jsonObject.getJSONArray(key), list); } else { map.put(key, jsonObject.get(key)); } } return map; } /** *<p>類描述:如果是鍵對應陣列,則返回一個list到上級的map裡。</p> */ private static void populateArray(JSONArray jsonArray, List list) { for (int i = 0; i < jsonArray.size(); i++) if (jsonArray.get(i).getClass().equals(JSONArray.class)) { ArrayList _list = new ArrayList(); list.add(_list); populateArray(jsonArray.getJSONArray(i), _list); } else if (jsonArray.get(i).getClass().equals(JSONObject.class)) { HashMap _map = new HashMap(); list.add(_map); populate(jsonArray.getJSONObject(i), _map); } else { list.add(jsonArray.get(i)); } }
}
呼叫如下即可看到效果:
Map map = JsonUtils.json2Map(json.toString());
方法詳細解釋在這裡:http://blog.csdn.net/haqer0825/article/details/9708293