JSON(JavaScript Object Notation)是一種輕量級的數據交換格式,JSON以key-value的形式提供了很好的讀寫,在web開發中以前用過xml來進行數據的交互和傳輸, 但xml的數據結構比較複雜和繁瑣, 讀寫能力差, JSON的出現更好的改變了後臺與前臺數據的交互方式, JSON能夠支持不一樣類型之間的轉換, 支持不一樣的語言C/Java/Python/Ruby, 詳情可訪問 http://json.org/java
JSON在實際項目中的應用很是之多,經過後臺通過業務處理將數據以JSON格式返回給前臺, 不少web開發中都是採用JSON進行數據的傳輸, JSON有不少的類庫, Json-lib, Jackson,Gson,FastJsonweb
1. json-lib 是最先應用最普遍的json解析工具, 缺點在於依賴較多的第三方包json
2.Jackson是開源的,相比json-lib依賴的jar包較少,簡單易用而且性能較高數組
3. Gson是由Google公司開發的,被稱爲目前功能最全的Json解析神器數據結構
4. Fastjson是一個Java語言編寫的高性能的JSON處理器,由阿里開發工具
無依賴不須要額外的jar,解析速度快性能
接下來我將介紹一下我用fastjson封裝了一個工具類的使用測試
開始 在pom.xml 添加:spa
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.7</version> </dependency>
下面的工具類提供了不一樣類型的轉換, 不只能夠支持json與數組,對象, List, Map, XML之間的轉換,下面來看代碼:code
package com.simple.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.TypeReference; import net.sf.json.JSONSerializer; import net.sf.json.xml.XMLSerializer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; public final class JsonTools { public static final Logger logger = LoggerFactory.getLogger(JsonTools.class); /** * convert object to json * @param obj object * @param <T> object type */ public static <T> String toJson(T obj) { return JSON.toJSONString(obj, true); } /** * convert List to json * * @param list list * @param <T> object type */ public static <T> String toJson(List<T> list) { return JSON.toJSONString(list, true); } /** * convert Map to json * * @param map Map */ public static <K, V> String toJson(Map<K, V> map) { return JSON.toJSONString(map, true); } /** * convert array to json * * @param arrs Array * @param <T> Type of the Array */ public static <T> String toJson(T[] arrs) { return JSON.toJSONString(arrs, true); } /** * convert xml to json */ public static String xml2Json(String xml) { XMLSerializer xmlSerializer = new XMLSerializer(); return xmlSerializer.read(xml).toString(); } /** * convert json to object * * @param json jsonString * @param clazz ClassType * @param <T> Object */ public static <T> T fromJson(String json, Class<T> clazz) { T obj; try { obj = JSON.parseObject(json, clazz); } catch (Exception e) { logger.error("convert JSON to Object failure", e); throw new RuntimeException(e); } return obj; } /** * convert json to array * @param json jsonString */ public static JSONArray fromJson(String json) { JSONArray jsonArray; try { jsonArray = JSON.parseArray(json); } catch (Exception e) { logger.error("convert JSON to Array failure", e); throw new RuntimeException(e); } return jsonArray; } /** * convert json to List * @param json jsonString * @param <T> type */ public static <T> List<T> fromJson2List(String json, Class<T> clazz) { List<T> tList; try { tList = JSON.parseArray(json, clazz); } catch (Exception e) { logger.error("convert JSON to List failure", e); throw new RuntimeException(e); } return tList; } /** * convert json to map * * @param json jsonString */ public static List<Map<String, Object>> fromJson2Map(String json) { List<Map<String, Object>> map; try { map = JSON.parseObject(json, new TypeReference<List<Map<String, Object>>>() { }); } catch (Exception e) { logger.error("convert JSON to Map failure", e); throw new RuntimeException(e); } return map; } /** * convert json to XML * @param json jsonString */ public static String fromJson2XML(String json) { XMLSerializer serializer = new XMLSerializer(); net.sf.json.JSON jsonObject = JSONSerializer.toJSON(json); return serializer.write(jsonObject); } }
測試代碼:
package test; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.simple.model.User; import com.simple.util.JsonTools; import org.junit.Test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JsonToolsTest { @Test public void testToJsonFromObject() throws Exception { User user = new User(); user.setId("1000"); user.setUsername("zhangsan"); user.setPassword("123"); user.setRealName("xiaobian"); user.setPhone("18601705642"); String jsonString = JsonTools.toJson(user); System.out.println(jsonString); } @Test public void testFromJsonObject() throws Exception{ String json = "{\"id\":\"1000\",\"password\":\"123\",\"phone\":\"18601705642\",\"realName\":\"xiaobian\",\"username\":\"zhangsan\"}"; User user = JsonTools.fromJson(json, User.class); System.out.println(user); } @Test public void testFromJsonList() { List<User> userList = new ArrayList<User>(); User user = new User(); User user2 = new User(); user.setId("1000"); user.setUsername("zhangsan"); user.setPassword("123"); user.setRealName("xiaobian"); user.setPhone("18601705642"); user2.setId("2000"); user2.setUsername("lisi"); user2.setPassword("123567"); user2.setRealName("xiaobian2"); user2.setPhone("18601705642"); userList.add(user); userList.add(user2); String jsonString = JsonTools.toJson(userList); System.out.println(jsonString); } @Test public void testFromJsonMap() { Map<String, User> map = new HashMap<String, User>(); map.put("1",new User("1000","zhangsan","123","xiaobian","18601705642")); map.put("2", new User("2000", "zhangsan2", "123456", "xiaobian2", "15901705642")); String jsonString = JsonTools.toJson(map); System.out.println(jsonString); } @Test public void testFromJsonArrays(){ String[] arrs = {"bill","green","maks","jim"}; String jsonString = JsonTools.toJson(arrs); System.out.println(jsonString); } @Test public void testFromJson2JsonArray(){ String json = "[\"bill\",\"green\",\"maks\",\"jim\"]"; JSONArray jsonArray = JSON.parseArray(json); System.out.println(jsonArray); } @Test public void testFromJson2List() { String json = "[\n" + "\t{\n" + "\t\t\"id\":\"1000\",\n" + "\t\t\"password\":\"123\",\n" + "\t\t\"phone\":\"18601705642\",\n" + "\t\t\"realName\":\"xiaobian\",\n" + "\t\t\"username\":\"zhangsan\"\n" + "\t},\n" + "\t{\n" + "\t\t\"id\":\"2000\",\n" + "\t\t\"password\":\"123567\",\n" + "\t\t\"phone\":\"18601705642\",\n" + "\t\t\"realName\":\"xiaobian2\",\n" + "\t\t\"username\":\"lisi\"\n" + "\t}\n" + "]\n"; List<User> userList = JsonTools.fromJson2List(json, User.class); System.out.println(userList); } @Test public void testMap2Json(){ String json = "[{\n" + "\t\"1\":{\n" + "\t\t\"id\":\"1000\",\n" + "\t\t\"password\":\"123\",\n" + "\t\t\"phone\":\"18601705642\",\n" + "\t\t\"realName\":\"xiaobian\",\n" + "\t\t\"username\":\"zhangsan\"\n" + "\t},\n" + "\t\"2\":{\n" + "\t\t\"id\":\"2000\",\n" + "\t\t\"password\":\"123456\",\n" + "\t\t\"phone\":\"15901705642\",\n" + "\t\t\"realName\":\"xiaobian2\",\n" + "\t\t\"username\":\"zhangsan2\"\n" + "\t}\n" + "}]"; List<Map<String,Object>> map = JsonTools.fromJson2Map(json); System.out.println(map); } @Test public void testJson2XML() throws Exception{ String json = "[\n" + "\t{\n" + "\t\t\"id\":\"1000\",\n" + "\t\t\"password\":\"123\",\n" + "\t\t\"phone\":\"18601705642\",\n" + "\t\t\"realName\":\"xiaobian\",\n" + "\t\t\"username\":\"zhangsan\"\n" + "\t},\n" + "\t{\n" + "\t\t\"id\":\"2000\",\n" + "\t\t\"password\":\"123567\",\n" + "\t\t\"phone\":\"18601705642\",\n" + "\t\t\"realName\":\"xiaobian2\",\n" + "\t\t\"username\":\"lisi\"\n" + "\t}\n" + "]\n"; String results = JsonTools.fromJson2XML(json); System.out.println(results); } @Test public void testXML2Json(){ String json = JsonTools.xml2Json("<Response>\n" + " <CustID>1300000428</CustID>\n" + " <CompID>1100000324</CompID>\n" + " <Items>\n" + " <Item>\n" + " <Sku_ProductNo>sku_0004</Sku_ProductNo>\n" + " <Wms_Code>1700386977</Wms_Code>\n" + " <Sku_Response>T</Sku_Response>\n" + " <Sku_Reason></Sku_Reason>\n" + " </Item>\n" + " <Item>\n" + " <Sku_ProductNo>0005</Sku_ProductNo>\n" + " <Wms_Code>1700386978</Wms_Code>\n" + " <Sku_Response>T</Sku_Response>\n" + " <Sku_Reason></Sku_Reason>\n" + " </Item>\n" + " </Items>\n" + "</Response>\n"); System.out.println(json); } }
FastJson常見操做
public class FastJsonTest { public static List<Employee> generateData() { return Arrays.asList(new Employee("Matt", 5000, "New York"), new Employee("Steve", 6000, "London"), new Employee("Carrie", 10000, "New York"), new Employee("Peter", 7000, "New York"), new Employee("Alec", 6000, "London"), new Employee("Sarah", 8000, "London"), new Employee("Rebecca", 4000, "New York"), new Employee("Pat", 20000, "New York"), new Employee("Tammy", 9000, "New York"), new Employee("Fred", 15000, "Tokyo")); } public static Map<String, Integer> generateMapData() { Map<String, Integer> items = Maps.newHashMap(); items.put("zhangsan", 10); items.put("lisi", 20); items.put("wangwu", 30); items.put("liumei", 40); items.put("zhanglimei", 50); items.put("chaochao", 60); return items; } @Test public void testFastJson(){ System.out.println(">>>>>List 轉化爲 JSON>>>>"); List<Employee> employeeList = generateData(); String employJson = JSON.toJSONString(employeeList); System.out.println(employJson); System.out.println(">>>>>MAP 轉化爲 JSON>>>>"); Map<String,Integer> map_json = generateMapData(); String empJson = JSON.toJSONString(map_json); System.out.println(empJson); System.out.println(">>>>>JSON 轉化爲 List>>>>"); String json = "[{\"name\":\"Matt\",\"office\":\"New York\",\"salary\":5000},{\"name\":\"Steve\",\"office\":\"London\",\"salary\":6000},{\"name\":\"Carrie\",\"office\":\"New York\",\"salary\":10000},{\"name\":\"Peter\",\"office\":\"New York\",\"salary\":7000},{\"name\":\"Alec\",\"office\":\"London\",\"salary\":6000},{\"name\":\"Sarah\",\"office\":\"London\",\"salary\":8000},{\"name\":\"Rebecca\",\"office\":\"New York\",\"salary\":4000},{\"name\":\"Pat\",\"office\":\"New York\",\"salary\":20000},{\"name\":\"Tammy\",\"office\":\"New York\",\"salary\":9000},{\"name\":\"Fred\",\"office\":\"Tokyo\",\"salary\":15000}]\n"; List<Employee> toEmployList = JSON.parseArray(json,Employee.class); System.out.println(toEmployList); System.out.println(">>>>>JSON 轉化爲 MAP>>>>"); String json_ = "{\"liumei\":40,\"lisi\":20,\"zhangsan\":10,\"wangwu\":30,\"zhanglimei\":50,\"chaochao\":60}\n"; Map<String,Object> toEmployMap = JSON.parseObject(json_); System.out.println(toEmployMap); } }