善其事l利其器篇——FastJson API
FastJson作为阿里的开源框架,基于JSON协议进行序列化、反序列化;支持Json对象与任意Java Bean Class、Collection、Map、Date之间的转换。项目中经常用到,故作此总结,主要针对常用API,侧重实践。
对象及API(常用)
1、JSON解析器:负责实现对象与json串之间的转换工作(序列化、反序列化操作)
2、JSONObject:普通key-value键值对String转换后的序列化对象,实质Map结构。
API主要包括1)根据key获取对应value(根据key的类型可调用getString\getInteger等API);2)根据key获取key-value串中包含的数据对象3)Map API
3、JSONArray:包含key-value键值对的数组结构,实质List。
API主要包括1)根据index获取数据中对象(可直接getJSONObject获取JSONObject对象,然后调用getString等获取value值)2)List API
写个例子简单看使用
public Result around(ProceedingJoinPoint proceedingJoinPoint) {
// 获取java数组
Object[] args = proceedingJoinPoint.getArgs();
// 将数组转成String
String string = JSON.toJSON(args).toString();
System.out.println(string);
// 将string串转成JSONArray
JSONArray jsonArray = JSONArray.parseArray(string);
// 遍历获取JSONArray中JSONObject,再根据key拿到对应value
for (int i=0;i<jsonArray.size();i++){
String bid=jsonArray.getJSONObject(0).getString("businessId");
String payOrderId=jsonArray.getJSONObject(0).getString("payOrderId");
}
}
JAVA类转换
重点看一下在序列化对象反序列转成JAVA类时的操作,无外乎转成java bean、List、Map这些日常操作类。
1、JSONObject转java bean,JSONArray转List
/**
* 1、将json串转换成java bean
*/
@Test
public void testComplexJSONObjectToJavaBean() {
// 将json串转成json对象
JSONObject jsonObject = JSONObject.parseObject(COMPLEX_JSON_STR);
// 第一种方式,使用TypeReference<T>类,由于其构造方法使用protected进行修饰,故创建其子类
Teacher teacher = JSONObject.parseObject(jsonObject.toJSONString(), new TypeReference<Teacher>() {});
System.out.println(teacher);
// 第二种方式,使用Gson的思想
Teacher teacher1 = JSONObject.parseObject(jsonObject.toJSONString(), Teacher.class);
System.out.println(teacher1);
}
/**
* 2、json数组串转换成List
*/
@Test
public void testJsonArrayToJavaList() {
// 将json串转换成json数组对象
JSONArray jsonArray = JSONArray.parseArray(JSON_ARRAY_STR);
// 第一种方式,使用TypeReference<T>类,由于其构造方法使用protected进行修饰,故创建其子类
ArrayList<Student> students = JSONArray.parseObject(jsonArray.toJSONString(), new TypeReference<ArrayList<Student>>() {});
// 第二种方式,使用Gson的思想
List<Student> students1 = JSONArray.parseArray(jsonArray.toJSONString(), Student.class);
}
2、JSONObject转map,因为JSONObject本身就是key-value结构,所以java bean 转 Map直接先转成json串,再parseObject方可转成对应map,属性和属性值分别对应map 的k-v
JSONObject.parseObject(JSON.toJSONString(messageDto));
3、JSONArray转Map,对象数组转JSONArray后,遍历jsonArray,通过获取jsonObject对象转成map后,对map操作。而后可通过List或Map集合承载每个jsonObject转成的map。
获取java数组
Object[] args = proceedingJoinPoint.getArgs();
JSONArray jsonArray = JSONArray.parseArray(JSONArray.toJSONString(args));
for (int i = 0; i < jsonArray.size(); i++) {
Map map=JSONObject.parseObject(jsonArray.getJSONObject(i).toJSONString());
Object bii=map.get("buId");
Object pii=map.get("payOId");
Object psi=map.get("pageSize");
JSONArray jsonArray = JSONArray.parseArray(JSONArray.toJSONString(args));
List<Map<String,Object>> mapListJson = (List)jsonArray;