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<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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值