• 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

    如果错过太阳时你流了泪,那你也要错过群星了。
    在所有的矛盾中,要优先解决主要矛盾,其他矛盾也就迎刃而解。
    不要做个笨蛋,为失去的郁郁寡欢,聪明的人,已经找到了解决问题的办法,或正在寻找。
  • 相关阅读:
    Luogu P3346 [ZJOI2015]诸神眷顾的幻想乡
    SP10570 LONGCS
    Luogu P3975 [TJOI2015]弦论
    hihocoder #1457 : 后缀自动机四&#183;重复旋律7
    Luogu SP8222 NSUBSTR
    SP7258 SUBLEX
    Luogu P4070 [SDOI2016]生成魔咒
    [清华集训2016]组合数问题
    [NOIP2018TG]保卫王国
    [note]克鲁斯卡尔重构树
  • 原文地址:https://www.cnblogs.com/szrs/p/12131972.html
Copyright © 2020-2023  润新知