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

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 jsonToList(JSONArray jsonArr)
            throws JSONException {
        List jsonToMapList = new ArrayList();
        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 jsonToMap(JSONObject jsonObj)
            throws JSONException {
        Map jsonMap = new TreeMap();
        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

你可能感兴趣的:(Java)