普通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 json2MapString json) {
LinkedMap map = new LinkedMap);
JSONObject js = JSONObject.fromObjectjson);
populatejs, map);
return map;
}
/**
*<p>类描述:json中的键值对解析成map。</p>
*/
private static Map populateJSONObject jsonObject, Map map) {
for Iterator iterator = jsonObject.entrySet).iterator); iterator
.hasNext);) {
String entryStr = String.valueOfiterator.next));
String key = entryStr.substring0, entryStr.indexOf"="));
String value = entryStr.substringentryStr.indexOf"=") + 1,
entryStr.length));
if jsonObject.getkey).getClass).equalsJSONObject.class)) {
HashMap _map = new HashMap);
map.putkey, _map);
populatejsonObject.getJSONObjectkey), Map) _map)));
} else if jsonObject.getkey).getClass).equalsJSONArray.class)) {
ArrayList list = new ArrayList);
map.putkey, list);
populateArrayjsonObject.getJSONArraykey), list);
} else {
map.putkey, jsonObject.getkey));
}
}
return map;
}
/**
*<p>类描述:如果是键对应数组,则返回一个list到上级的map里。</p>
*/
private static void populateArrayJSONArray jsonArray, List list) {
for int i = 0; i < jsonArray.size); i++)
if jsonArray.geti).getClass).equalsJSONArray.class)) {
ArrayList _list = new ArrayList);
list.add_list);
populateArrayjsonArray.getJSONArrayi), _list);
} else if jsonArray.geti).getClass).equalsJSONObject.class)) {
HashMap _map = new HashMap);
list.add_map);
populatejsonArray.getJSONObjecti), _map);
} else {
list.addjsonArray.geti));
}
}
}
调用如下即可看到效果:
Map map = JsonUtils.json2Mapjson.toString));
方法详细解释在这里:http://blog.csdn.net/haqer0825/article/details/9708293