您的位置:首页 > 编程语言 > Java开发

Java List或Map对象和json字符串数据的相互转化

2014-03-10 15:47 881 查看
Java代码JsonKit类

package cn.okek.util;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

/**
* 实用工具包
* @author 周文鹏
* @date 2014-1-21
*/
public class JsonKit {

/**
* 将list转为json
* @param lists
* @param sb
* @return
*/
public static StringBuilder listToJson(List<?> lists, StringBuilder sb) {
if (sb == null) sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < lists.size(); i++) {
Object o = lists.get(i);
if (o instanceof Map<?, ?>) {
Map<?, ?> map = (Map<?, ?>) o;
mapToJson(map, sb);
} else if (o instanceof List<?>) {
List<?> l = (List<?>) o;
listToJson(l, sb);
} else {
sb.append("\"" + o + "\"");
}
if (i != lists.size() - 1) sb.append(",");
}
sb.append("]");
return sb;
}

/**
* 将map转为json
* @param map
* @param sb
* @return
*/
public static StringBuilder mapToJson(Map<?, ?> map, StringBuilder sb) {
if (sb == null) sb = new StringBuilder();
sb.append("{");
Iterator<?> iter = map.entrySet().iterator();
while (iter.hasNext()) {
Entry<?, ?> entry = (Entry<?, ?>) iter.next();
String key = entry.getKey() != null ? entry.getKey().toString() : "";
sb.append("\"" + stringToJson(key) + "\":");
Object o = entry.getValue();
if (o instanceof List<?>) {
List<?> l = (List<?>) o;
listToJson(l, sb);
} else if (o instanceof Map<?, ?>) {
Map<?, ?> m = (Map<?, ?>) o;
mapToJson(m, sb);
} else {
String val = entry.getValue() != null ? entry.getValue().toString() : "";
sb.append("\"" + stringToJson(val) + "\"");
}
if (iter.hasNext()) sb.append(",");
}
sb.append("}");
return sb;
}

/**
* 将字符串转为json数据
* @param str 数据字符串
* @return json字符串
*/
private static String stringToJson(String str) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
switch (c) {
case '\"':
sb.append("\\\"");
break;
case '\\':
sb.append("\\\\");
break;
case '/':
sb.append("\\/");
break;
case '\b':
sb.append("\\b");
break;
case '\f':
sb.append("\\f");
break;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\t':
sb.append("\\t");
break;
default:
sb.append(c);
}
}
return sb.toString();
}

/**
* JsonArray转List
* @param jsonArr
* @return
* @throws JSONException
*/
public static List<Object> jsonToList(JSONArray jsonArr)
throws JSONException {
List<Object> jsonToMapList = new ArrayList<Object>();
for (int i = 0; i < jsonArr.length(); i++) {
Object object = jsonArr.get(i);
if (object instanceof JSONArray) {
jsonToMapList.add(jsonToList((JSONArray) object));
} else if (object instanceof JSONObject) {
jsonToMapList.add(jsonToMap((JSONObject) object));
} else {
jsonToMapList.add(object);
}
}
return jsonToMapList;
}

/**
* JsonObject转Map
* @param jsonObj
* @return
* @throws JSONException
*/
public static Map<String, Object> jsonToMap(JSONObject jsonObj)
throws JSONException {
Map<String, Object> jsonMap = new TreeMap<String, Object>();
Iterator<?> jsonKeys = jsonObj.keys();
while (jsonKeys.hasNext()) {
String jsonKey = (String) jsonKeys.next();
Object jsonValObj = jsonObj.get(jsonKey);
if (jsonValObj instanceof JSONArray) {
jsonMap.put(jsonKey, jsonToList((JSONArray) jsonValObj));
} else if (jsonValObj instanceof JSONObject) {
jsonMap.put(jsonKey, jsonToMap((JSONObject) jsonValObj));
} else {
jsonMap.put(jsonKey, jsonValObj);
}
}
return jsonMap;
}
}

将java对象list或者map转json数据不需要第三方包,直接使用就可以了,如果你传入的数据不确定是map类型还是list类型,那么自己处理一下就可以了(判断下类型,传入参数改为object)。

如果是json数据转成java对象list或map,则需要一个第三方包org.json.jar,用这个包的好处是只需要导入这一个包就可以了,不需要其它支持的包。

下载地址 http://download.csdn.net/detail/syaringan356/7017917
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐