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)ListAPI
写个例子简单看使用
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); // 第一种方式,故创建其子类 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;