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); } }