二话不说贴代码,需要的jar包见附件
public interface JsonParseCallback {
public void onKeyValueGet(String key, Object value);
}
/**
* 根据JSON字符串,以key标记原JSON层次结构,得到单层的HashMap
*
* @param jsonString
* @param preKey
* @return
*/
private void jsonToMap(Object jsonString, String preKey, JsonParseCallback mJsonParseCallback ) {
JSONObject jsonObj = null;
boolean isJsonObj = true;
try {
jsonObj = JSONObject.fromObject(jsonString);
} catch (Exception e) {
if (e instanceof ClassCastException) {
isJsonObj = false;
}
}
if (isJsonObj && jsonObj != null) {
Iterator<?> jsonIt = jsonObj.keys();
while (jsonIt.hasNext()) {
String originKey = (String) jsonIt.next();
String prefix = preKey.isEmpty() ? "" : preKey + "/";
String key = prefix + originKey;
Object tmpJsonObj = jsonObj.get(originKey);
try {
if (tmpJsonObj instanceof JSONObject) {
jsonToMap(tmpJsonObj.toString(), key, mJsonParseCallback);
}
else if (tmpJsonObj instanceof JSONArray) {
for (int i = 0; i < ((JSONArray) tmpJsonObj).size(); i++) {
Object obj = ((JSONArray) tmpJsonObj).get(i);
jsonToMap(obj.toString(), key, mJsonParseCallback);
}
}
else {
mJsonParseCallback.onKeyValueGet(key, tmpJsonObj);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
else {
JSONArray jsonArray = null;
boolean isJsonArray = true;
try {
jsonArray = JSONArray.fromObject(jsonString);
} catch (Exception e) {
if (e instanceof ClassCastException) {
isJsonArray = false;
}
}
if (isJsonArray && jsonArray != null) {
for (int i = 0; i < jsonArray.size(); i++) {
Object obj = jsonArray.get(i);
jsonToMap(obj.toString(), preKey, mJsonParseCallback);
}
}
else {
mJsonParseCallback.onKeyValueGet(preKey, jsonString); }
}
}