JSON基本使用

目录

4.1 JSON简述

4.2 XML与JSON的区别

4.3 JSON语法格式

4.4 JSON数据的转换

4.4.1 FastJson介绍

4.4.2 FastJson的使用

4.4.3 将 Java 对象转换为 JSON 格式

4.4.4 JSON 字符串转换为 Java 对象


4.1 JSON简述

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

它是一种数据格式。它本身是一串字符串,只是它有固定格式的字符串,符合这个数据格式要求的字符串,我们称之为JSON。
用来代替XML做数据交换。

JSON的特点:

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

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

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

4.2 XML与JSON的区别

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

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

  • 相同点:

    • 它们都可以作为一种数据交换格式。

  • 二者区别:

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

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

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

4.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.4 JSON数据的转换

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

4.4.1 FastJson介绍

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

  • FastJson特点如下:

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

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

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

4.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.4.3 将 Java 对象转换为 JSON 格式

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

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

2) 可以使用 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":"小斌"}]
    }
}

3) 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.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);
​
    }

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL中对JSON基本操作主要包括合并JSON数据、创建JSON数组形式和JSON对象的数据、创建JSON类型的字段以及修改JSON数据。 合并JSON数据可以使用函数JSON_MERGE(json_doc, json_doc[, json_doc] …),其中json_doc表示要合并的JSON数据。 创建JSON数组形式的数据可以使用函数JSON_ARRAY([val[, val] …]),其中val表示要添加到JSON数组中的值。创建JSON对象形式的数据可以使用函数JSON_OBJECT([key, val[, key, val] …]),其中key表示键,val表示值。 在MySQL 5.7版本开始,可以直接设置字段类型为json类型来存储JSON数据。例如,可以创建一张名为test_user的表,并设置一个名为data的字段类型为json: CREATE TABLE `test_user`(`id` INT PRIMARY KEY AUTO_INCREMENT, `data` JSON); 修改JSON数据的方法包括在JSON数组后增加新的数据和在JSON数组中插入新的数据。可以使用函数JSON_ARRAY_APPEND(json_doc, path, val[, path, val] …)在JSON数组后增加新的数据,其中json_doc表示要修改的JSON数据,path表示要添加数据的路径,val表示要添加的值。可以使用函数JSON_ARRAY_INSERT(json_doc, path, val[, path, val] …)在JSON数组中插入新的数据,其中json_doc表示要修改的JSON数据,path表示要插入数据的路径,val表示要插入的值。 通过以上方法,可以对MySQL中的JSON数据进行基本操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值