List、Map 与json转换的工具类

最近做公司项目安排做后台,因为写接口给别人用,就不能随随便便返回数据与接收数据了,为了统一性,要求统一用json来传输数据,为了方便后期的代码的维护以及代码的简洁,笔者整理了一下json与List、Map之间相互转换的方法统一封装成一个类,需要的拿走

所需的jar包:请自行搜索相关的jar包

下面是笔者整理的工具类,喜欢的拿走吧~

package com.utils;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.map.ListOrderedMap;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

/**
 * 
 * 处理json的工具类. <br>
 * 本类为处理json的工具类
 * 
 * @author ahk
 */
public class JsonTools {

	/**
	 * 
	 * json转换list. <br>
	 * 详细说明
	 * 
	 * @param jsonStr
	 *            json字符串
	 * @return
	 * @return List<Map<String,Object>> list
	 * @throws @author
	 *             ahk
	 * @date 2013年12月24日 下午1:08:03
	 */
	public static List<Map<String, Object>> parseJSON2List(String jsonStr) {
		JSONArray jsonArr = JSONArray.fromObject(jsonStr);
		List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
		Iterator<JSONObject> it = jsonArr.iterator();
		while (it.hasNext()) {
			JSONObject json2 = it.next();
			list.add(parseJSON2Map(json2.toString()));
		}
		return list;
	}

	/**
	 * 
	 * json转换map. <br>
	 * 详细说明
	 * 
	 * @param jsonStr
	 *            json字符串
	 * @return
	 * @return Map<String,Object> 集合
	 * @throws @author
	 *             ahk
	 */
	public static Map<String, Object> parseJSON2Map(String jsonStr) {
		ListOrderedMap map = new ListOrderedMap();
		// 最外层解析
		JSONObject json = JSONObject.fromObject(jsonStr);
		for (Object k : json.keySet()) {
			Object v = json.get(k);
			// 如果内层还是数组的话,继续解析
			if (v instanceof JSONArray) {
				List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
				Iterator<JSONObject> it = ((JSONArray) v).iterator();
				while (it.hasNext()) {
					JSONObject json2 = it.next();
					list.add(parseJSON2Map(json2.toString()));
				}
				map.put(k.toString(), list);
			} else {
				map.put(k.toString(), v);
			}
		}
		return map;
	}

	/**
	 * 
	 * 通过HTTP获取JSON数据. <br>
	 * 通过HTTP获取JSON数据返回list
	 * 
	 * @param url
	 *            链接
	 * @return
	 * @return List<Map<String,Object>> list
	 * @throws @author
	 *             ahk
	 */
	public static List<Map<String, Object>> getListByUrl(String url) {
		try {
			// 通过HTTP获取JSON数据
			InputStream in = new URL(url).openStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(in));
			StringBuilder sb = new StringBuilder();
			String line;
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
			return parseJSON2List(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 
	 * 通过HTTP获取JSON数据. <br>
	 * 通过HTTP获取JSON数据返回map
	 * 
	 * @param url
	 *            链接
	 * @return
	 * @return Map<String,Object> 集合
	 * @throws @author
	 *             ahk
	 */
	public static Map<String, Object> getMapByUrl(String url) {
		try {
			// 通过HTTP获取JSON数据
			InputStream in = new URL(url).openStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(in));
			StringBuilder sb = new StringBuilder();
			String line;
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
			return parseJSON2Map(sb.toString());
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 
	 * map转换json. <br>
	 * 详细说明
	 * 
	 * @param map
	 *            集合
	 * @return
	 * @return String json字符串
	 * @throws @author
	 *             ahk
	 */
	public static String mapToJson(Map<String, Object> map) {
		JSONObject jsonarray = JSONObject.fromObject(map);  
        return jsonarray.toString().trim();
	}
	
	/**
	 * 
	 * List<Map<String,	Object>>转换json. <br>
	 * 详细说明
	 * 
	 * @param List
	 *            集合
	 * @return
	 * @return String json字符串
	 * @throws @author
	 *             ahk
	 */
	public static <T> String listToJson(List<T> ts) {
    	JSONArray jsonarray = JSONArray.fromObject(ts);  
        return jsonarray.toString().trim();
    }

	// test
	public static void main(String[] args) {
		String jsonStr = "{\"ordersale\":\"15066226204\",\"o_name\":\"咖喱鸡\",\"orderpeople\":\"15621182793\",\"pay_status_id\":2,\"o_img1\":\"http://niu.dingdao8.com/FtsRcfTvrQkF953DWfTUH6xDNDh3\",\"goodsList\":[{\"goods_name\":\"德炎 麻辣小龙虾 900g 6-8钱/12-17只 海鲜水产\",\"goods_rule\":\"{}\",\"o_order_id\":\"20181009093210953000\",\"gid\":162,\"goods_price\":36.0,\"goods_select\":\"{}\",\"goods_count\":2,\"detail_id\":30,\"goods_img\":\"http://niu.dingdao8.com/BEC6DD2740914D23975CDF26409AEFD7_CD4A997F457041A19F37C3690DA41212_龙虾1.jpg\"}],\"o_img2\":\"无\",\"o_consignee\":\"ahk\",\"oid\":164,\"enterprise_id\":3082,\"o_regtime\":1539048732000,\"o_cycle\":27,\"payamount\":0.0,\"o_type\":2,\"o_desc\":\"him红\",\"o_order_id\":\"20181009093210953000\",\"order_arrears\":72.0,\"o_money\":72.0,\"o_phone\":\"15621182793\",\"o_img3\":\"无\",\"o_img4\":\"无\",\"o_address\":\"西海岸一号407\",\"OrderModify\":[{\"o_order_id\":\"20181009093210953000\",\"updatecontent\":\"来了\",\"updatetype\":1,\"o_modifier\":\"15066226204\",\"updatetime\":1539048783000},{\"o_order_id\":\"20181009093210953000\",\"updatecontent\":\"72.0\",\"updatetype\":0,\"updatetime\":1539048825000},{\"o_order_id\":\"20181009093210953000\",\"updatecontent\":\"你好\",\"updatetype\":1,\"o_modifier\":\"15066226204\",\"updatetime\":1539049122000}],\"o_ctime\":1539048732000}";
		Map<String, Object> list = parseJSON2Map(jsonStr);
		System.out.println(list);
		String json1 = "[{\"goods_name\":\"小米电视4A32英寸\",\"goods_rule\":[{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550}],\"gid\":153,\"goods_price\":999,\"goods_select\":[{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550},{\"8GB+128GB\":700,\"6.21英寸三星AMOLED屏幕\":1100,\"骁龙845旗舰处理器\":550}],\"goods_count\":1}]";
		List<Map<String, Object>> list2 = parseJSON2List(json1);
		System.out.println(list2);
		
		String json = mapToJson(list);
		System.out.println(json.trim());
		
		String jsonList = listToJson(list2);
		System.out.println(jsonList);
	}
}

写的不好,大家凑活看,如果有什么好的建议,请大家留言交流,共同进步~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值