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);
    
        }

     

  • 相关阅读:
    golang 数据结构 优先队列(堆)
    leetcode刷题笔记5210题 球会落何处
    leetcode刷题笔记5638题 吃苹果的最大数目
    leetcode刷题笔记5637题 判断字符串的两半是否相似
    剑指 Offer 28. 对称的二叉树
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 26. 树的子结构
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 24. 反转链表
    剑指 Offer 22. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/JasperZhao/p/15463778.html
Copyright © 2011-2022 走看看