最近做公司项目安排做后台,因为写接口给别人用,就不能随随便便返回数据与接收数据了,为了统一性,要求统一用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);
}
}
写的不好,大家凑活看,如果有什么好的建议,请大家留言交流,共同进步~