欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

善其事l利其器篇——FastJson API

程序员文章站 2022-07-15 10:37:40
...

FastJson作为阿里的开源框架,基于JSON协议进行序列化、反序列化;支持Json对象与任意Java Bean Class、Collection、Map、Date之间的转换。项目中经常用到,故作此总结,主要针对常用API,侧重实践。

善其事l利其器篇——FastJson 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;