1.JSON介绍
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,JSON以key-value的形式提供了很好的读写,在web开发中之前用过xml来进行数据的交互和传输, 但xml的数据结构比较复杂和繁琐, 读写能力差, JSON的出现更好的改变了后台与前台数据的交互方式, JSON可以支持不同类型之间的转换, 支持不同的语言C/Java/Python/Ruby, 详情可访问 http://json.org/
2.关于JSON项目中使用
JSON在实际项目中的应用非常之多,通过后台经过业务处理将数据以JSON格式返回给前台, 很多web开发中都是采用JSON进行数据的传输, JSON有很多的类库, Json-lib, Jackson,Gson,FastJson
1. json-lib 是最早应用最广泛的json解析工具, 缺点在于依赖较多的第三方包
2.Jackson是开源的,相比json-lib依赖的jar包较少,简单易用并且性能较高
3. Gson是由Google公司开发的,被称为目前功能最全的Json解析神器
4. Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里开发
无依赖不需要额外的jar,解析速度快
3.封装JSON工具类
接下来我将介绍一下我用fastjson封装了一个工具类的使用
开始 在pom.xml 添加:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
下面的工具类提供了不同类型的转换, 不仅可以支持json与数组,对象, List, Map, XML之间的转换,下面来看代码:
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);
}
}