Fastjson使用示例及常见问题(六)

一、介绍

1. 什么是fastjson?

fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。

Fastjson使用场景

Fastjson已经被广泛使用在各种场景,包括cache存储、RPC通讯、MQ通讯、网络协议通讯、Android客户端、Ajax服务器处理程序等等。

2.fastjson的优点

2.1 速度快

fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。

2.2 使用广泛

fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。

二、代码示例

使用示例见链接:https://www.w3cschool.cn/fastjson/

代码示例:

package com.asd.reserve.utils.fastjson.demo2;

/**
 * @author zs
 * @date 2019/11/22 14:53
 */

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.ArrayList;
import java.util.List;

public class FastJsonDemo {

    static class Person{
        private String id ;
        private String name;
        private int age ;

        public Person(){

        }
        public Person(String id,String name,int age){
            this.id=id;
            this.name=name;
            this.age=age;
        }
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "Person [age=" + age + ", id=" + id + ", name=" + name + "]";
        }
    }
    public static void main(String[] args) {
        //method1();
        //method2();
        //method3();
        //method4();
        method5();
    }

    /**
    *@Author: zs on 2020/1/3 9:56
    *@param: 
    *@return: 
    *@Description:对象与json串互转
    */
    
    public static void method1(){

        System.out.println("javabean转化示例开始----------");

        Person person = new Person("1","fastjson",1);
        //将javabean转化成json字符串
        String jsonString = JSON.toJSONString(person);
        System.out.println(jsonString);
        //将json字符串转化成javabean对象,
        person =JSON.parseObject(jsonString,Person.class);
        System.out.println(person.toString());
        System.out.println("javabean转化示例结束----------");
    }

    /**
    *@Author: zs on 2020/1/3 9:56
    *@param: 
    *@return: 
    *@Description:List集合与json串互转
    */
    
    public static void method2(){

        System.out.println("List<javabean>转化示例开始----------");

        Person person1 = new Person("1","fastjson1",1);
        Person person2 = new Person("2","fastjson2",2);
        List<Person> personList = new ArrayList<Person>();
        personList.add(person1);
        personList.add(person2);
        String jsonString = JSON.toJSONString(personList);
        System.out.println("json字符串:"+jsonString);
        //解析json字符串
        List<Person> persons2 = JSON.parseArray(jsonString,Person.class);
        //输出解析后的person对象,也可以通过调试模式查看persons2的结构
        System.out.println("person1对象:"+persons2.get(0).toString());
        System.out.println("person2对象:"+persons2.get(1).toString());
        System.out.println("List<javabean>转化示例结束----------");
    }

    public static void method3(){

        String result = "生成成功";
        String status = JSON.toJSONString(result);
        System.out.println(result);
        System.out.println(status);
    }

    public static void method4(){
        String status = "{"status":"生成成功"}";
        JSONObject jsonObject = JSONObject.parseObject(status);
        Object o = jsonObject.get("status");
        System.out.println(o);
    }

    public static void method5(){

        /**
         * 数据样式
         * {
         status: success,
         root: [{
         type: 'long',
         propName: 'reins',
         location: '0',
         propValue: '5228',
         desc: 'zs'
         }, {
         type: 'char',
         propName: 'reserve',
         location: '0',
         propValue: '-1',
         desc: 'zs'
         }]
         }*/
        String json = "{success: true,root: [{id: '123',name: '123',age: '123'}, {id: '123',name: '12321',age: '13123'}]}";
        JSONObject jsonObject = JSONObject.parseObject(json);
        Object success = jsonObject.get("success");
        Object root = jsonObject.get("root");
        List<Person> personList = JSON.parseArray(root+"", Person.class);
        System.out.println(success);
    }
}
View Code

三、prettyJson-格式化

/**
     * 跳转到xxl
     * @return xxl-url
     */
    @PostMapping("/general/xxl/url1")
    public ApiResponse<String> getXxlUrl1(){

        String a = "{"key":"value","key2":"value2"}";
        System.out.println(a);
        System.out.println(prettyJson(a));
        return ApiResponseMapper.ok(address);
    }
    /**
     * json 美化
     * @param json
     * @return
     */
    private static String prettyJson(String json) {

        JSONObject jsonObject = null;
        try {
            jsonObject = JSONObject.parseObject(json);
        } catch (Exception e) {
            return json;
        }
        return JSONObject.toJSONString(jsonObject, true);
    }

输出:

未格式化:
{"key":"value","key2":"value2"} 格式化后:
{
"key2":"value2", "key":"value" }

使用的时候会发现fastjson对json的属性有自己的排序的方式,因为json本来是不保证属性的次序的。就像上面那样,我的入参明明是key1在前,但是美化后变成了key2在前。这个时候需要加一句让fastjson保证字符串中json的次序即可。

用这个方法就行了

jsonObject = JSONObject.parseObject(json, Feature.OrderedField);

参看链接:https://blog.csdn.net/u010251278/article/details/91992618

四、vuejson格式化插件

 vue-json-viewer

监控项目在公司没有下下来包,就没有测试。

参看链接:

https://www.cnblogs.com/TestingShare/p/14336612.html

https://www.cnblogs.com/phermis/p/10791158.html

如果错过太阳时你流了泪,那你也要错过群星了。
在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
原文地址:https://www.cnblogs.com/szrs/p/12131972.html