【Javaweb】JSON

笔记输出来源:拉钩教育Java就业急训营

修改时间:2021年2月2日
作者:pp_x
邮箱:[email protected]

JSON

基本概念

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

JSON的特点

  • SON 是一种轻量级的数据交换格式
  • JSON采用完全独立于语言的文本格式,就是说不同的编程语言JSON数据是一致的。
  • JSON易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

XML和JSON的区别与联系

  • XML : 可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。
  • JSON: (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式
  • 相同点:
    • 它们都可以作为一种数据交换格式
  • 异同点:
    • XML是重量级的,JSON是轻量级的,XML在传输过程中比较占带宽,JSON占带宽少,易于压缩。
    • XML和json都用在项目交互下,XML多用于做配置文件,JSON用于数据交互
    • JSON独立于编程语言存在,任何编程语言都可以去解析json

JSON的语法格式

{
    
    
	"id": 110,
	"name": "李会长",
	"age": 24
}
  • 外面由{}括起来
  • 数据以"键:值"对的形式出现(其中键多以字符串形式出现,值可取字符串,数值,甚至其他json对象)
  • 每两个"键:值"对以逗号分隔(最后一个"键:值"对省略逗号)
  • 参数值如果是string类型,就必须加引号,如果是数字类型,引号可加可不加
//自定义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)

JSON数据格式的转换

在这里插入图片描述

FastJSON概念

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

FastJSON的特点

  • 能够支持将java bean序列化成JSON字符串,也能够将JSON字符串反序列化成Java bean
  • 无其他包的依赖, 使用比较方便

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>

Java对象转换为JSON格式

  • 使用toJSONString方法
 //Java对象转换成json
    @Test
    public void javaBeanToJSON() {
    
    
        //创建person类
        Person person = new Person("柳小潇", 25, DateUtils.getDateFormart());
        //        使用JSON对对象 将person对象转化成json数据
        String string = JSON.toJSONString(person);
        System.out.println(string);
    }

    //将Java中的集合转换成json

    @Test
    public void ListToJSON() {
    
    
        Person person = new Person("柳小潇", 25, DateUtils.getDateFormart());
        Person person2 = new Person("柳小潇", 25, DateUtils.getDateFormart());
        Person person3 = new Person("柳小潇", 25, DateUtils.getDateFormart());
        //创建一个List集合
        ArrayList<Person> list = new ArrayList<>();
        //使用集合工具类将对象封装到集合
        Collections.addAll(list, person, person2, person3);
        //使用json对象的方法转为json格式
        String string = JSON.toJSONString(list);
        System.out.println(string);
    }

FastJSON中的注解

  • 通过 @JSONField 我们可以自定义字段的名称进行输出,并控制字段的排序,还可以进行序列化标记
    • 指定name属性, 字段的名称
    • 使用 ordinal属性, 指定字段的顺序
    • 使用** serialize属性**, 指定字段不序列化
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    
    
    //可以通过name去指定输出的名称
    //可以使用ordinal属性指定字段的顺序
    //可以使用serialize数据指定字段是否可以序列化 即是否转为json
    @JSONField(name = "USERNAME",ordinal = 1)
    private String userName;
    @JSONField(name = "AGE",ordinal = 2)
    private int age;
    @JSONField(serialize = false)
    private String birthday;
}

JSON字符串转换为Java对象

  • JSON.parseObject()
    • 可以使用JSON.parseObject()将JSON字符串转换为Java对象
    • 转换(反序列化)时,需要对应的Java类有无参构造方法,否则会报错
  • JSON.parseArray()
    • 可以使用JSON.parseArray()将JSON字符串转换为集合对象
 //将json数据格式转为Java对象
    @Test
    public void JSONToJavaBean(){
    
    
        String json = "{\"age\":15,\"birthday\":\"2020-07-03 19:54:33\",\"username\":\"码云\"}";

        //使用JSON对象的parseObject的方法
        Person jsonObject = JSON.parseObject(json,Person.class);
        System.out.println(jsonObject);
    }
    public void JSONToJavaList(){
    
    
        //将json集合转为list集合
        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> persons = JSON.parseArray(json2, Person.class);
        System.out.println(persons);
    }

猜你喜欢

转载自blog.csdn.net/weixin_46303867/article/details/113697352