zoukankan      html  css  js  c++  java
  • 教育后台管理系统:JSON

    1 JSON简述

      JSON(JavaScript Object Notation) JavaScript对象表示法(JSON源于JS)

      

    JSON的特点:

    • JSON 是一种轻量级的数据交换格式。

    • JSON采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。

    • JSON易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

    2 XML与JSON的区别

    • XML : 可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。

    • JSON: (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。

    • 相同点:
      •   它们都可以作为一种数据交换格式。
    • 二者区别:

      • XML是重量级的,JSON是轻量级的,XML在传输过程中比较占带宽,JSON占带宽少,易于压缩。

      • XML和json都用在项目交互下,XML多用于做配置文件,JSON用于数据交互

      • JSON独立于编程语言存在,任何编程语言都可以去解析json

    3 JSON语法格式

    我们先来看一下JSON数据:

    {
        "id": 110,
        "name": "李会长",
        "age": 24
    }

    语法注意:

    1. 外面由{}括起来

    2. 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)

    3. 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号

        4. 参数值如果是string类型,就必须加引号,如果是数字类型,引号可加可不加

         遵守上面4点,便可以形成一个json对象。

    代码示例:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    <script typet="text/javascript" src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
    
        <script>
    
            //自定义JSON数据格式 (Java中的对象)
            var person = {"name":"tom","sex":"女", "age":12};
            console.log(person);
    
            //数组格式
            var persons = {"person":[{"name":"tom","sex":"女", "age":12},{"name":"jack","sex":"男", "age":22}]};
            console.log(persons);
    
            //集合
            var list = [{"name":"老五","sex":"女", "age":12},{"name":"会长","sex":"男", "age":12}];
            console.log(list);
    
        </script>
    </head>
    <body>
    
    </body>
    </html>

    4 JSON数据的转换

    目前, 前后端的ajax通讯几乎用的都是json格式的了,所以在开发的过程中,我们经常会涉及到JSON数据的转换

    4.1 FastJson介绍

    • Fastjson 是一个 Java 库,可以将 Java 对象转换为 JSON 格式,当然它也可以将 JSON 字符串转换为 Java 对象。

    • FastJson特点如下:

      • 能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean。

      • 顾名思义,FastJson操作JSON的速度是非常快的。

      • 无其他包的依赖, 使用比较方便。

    4.2 FastJson的使用 

    • 在Maven项目中使用FastJson库,需要提前在Maven的配置文件中添加此FastJson包的依赖

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.3</version>
    </dependency>
    
    <dependency>
        <groupId>com.colobu</groupId>
        <artifactId>fastjson-jaxrs-json-provider</artifactId>
        <version>0.3.1</version>
    </dependency>

     

    4.3 将 Java 对象转换为 JSON 格式

    1. 定义一个名为 Person 的 JavaBean类

    public class Person {
        
        private String username;
    
        private int age;
    
        private String birthday;
    
         get/set
    }

      

    1. 可以使用 JSON.toJSONString() 将 Java 对象转换换为 JSON 对象:

    public class TestFastJSON {
    
        //Java对象转JSON
        @Test
        public void javaBeanToJSON(){
    
            //创建Person对象
            Person p = new Person("码云",15, DateUtils.getDateFormart());
    
            //使用JSON对象的 toString方法将对象转换为JOSN数据
            String s = JSON.toJSONString(p);
    
            System.out.println(s); //{"age":15,"birthday":"2020-07-03 19:54:33","username":"码云"}
        }
    
    
        //List集合转Json
        @Test
        public void ListToJSON(){
    
            //创建Person对象
            Person p1 = new Person("码云",15, DateUtils.getDateFormart());
            Person p2 = new Person("虎子",13, DateUtils.getDateFormart());
            Person p3 = new Person("小斌",18, DateUtils.getDateFormart());
    
            List<Person> list = new ArrayList<>();
    
            Collections.addAll(list,p1,p2,p3);
    
            //使用JSON对象的 toString方法将对象转换为JOSN数据
            String s = JSON.toJSONString(list);
    
            System.out.println(s);
            //[{"age":15,"birthday":"2020-07-03 19:59:05","username":"码云"},{"age":13,"birthday":"2020-07-03 19:59:05","username":"虎子"},{"age":18,"birthday":"2020-07-03 19:59:05","username":"小斌"}]
        }
    }
    1. Fastjson中的 @JSONField 注解

    • 通过 @JSONField 我们可以自定义字段的名称进行输出,并控制字段的排序,还可以进行序列化标记。

      • 指定name属性, 字段的名称

      • 使用 ordinal属性, 指定字段的顺序

      • 使用 serialize属性, 指定字段不序列化

    @Data
    public class Person {
        
        //自定义输出的名称, 并且进行输出排序
        @JSONField(name="USERNAME",ordinal = 1)
        private String username;
    
        @JSONField(name="AGE",ordinal = 2)
        private int age;
    
        //排除不需要序列化的字段
        @JSONField(serialize = false)
        private String birthday;
    
        public Person() {
        }
    
        public Person(String username, int age, String birthday) {
            this.username = username;
            this.age = age;
            this.birthday = birthday;
        }
    }

    4.4 JSON 字符串转换为 Java 对象

    • JSON.parseObject()

      • 可以使用 JSON.parseObject() 将 JSON 字符串转换为 Java 对象。

      • 注意反序列化时为对象时,必须要有默认无参的构造函数,否则会报异常

    • JSON.parseArray()

      • 可以使用 JSON.parseArray() 将 JSON 字符串转换为 集合对象。

    //JSON转Java对象
        @Test
        public void JSONToJavaBean(){
    
            String json = "{"age":15,"birthday":"2020-07-03 19:54:33","username":"码云"}";
            Person person = JSON.parseObject(json, Person.class);
            System.out.println(person);
    
            //创建Person对象
            String json2 ="[{"age":15,"birthday":"2020-07-03 19:59:05","username":"码云"},{"age":13,"birthday":"2020-07-03 19:59:05","username":"虎子"},{"age":18,"birthday":"2020-07-03 19:59:05","username":"小斌"}]";
            List<Person> list  = JSON.parseArray(json2,Person.class);
            System.out.println(list);
    
        }

     

  • 相关阅读:
    面试题三:MySQL
    面试题二:JVM
    面试题一:类加载
    RabbitMq脑裂问题
    数据结构之树学习内容
    JVM全面分析之垃圾收集器
    JVM全面分析之垃圾回收的相关概念
    JVM全面分析之垃圾回收算法
    JVM全面分析之String
    JVM全面分析之执行引擎
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15463778.html
Copyright © 2011-2022 走看看