使用Java对JSON进行解析

本文介绍了JSON的基本概念,包括其轻量级的数据交换格式和相对于XML的优势。接着,详细阐述了在Java中如何使用Gson和FastJson两个库进行JSON数据的解析,包括对象的序列化与反序列化操作,并给出了示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,什么是 JSON ?

json的全称为:JavaScript Object Notation,是一种轻量级的数据交互格式。
采用完全独立于编程语言的文本格式来存储和表示数据

背景:数据传输是我们在敲代码时,经常遇到的一个场景,前后端交互。给数据一个统一的格式有利于我们编写和解析数据。

2,JSON的格式

json中含有两种复合类型的值:数组、对象
基本类型的值有四种:字符串、数值(必须以十进制表示)、布尔值、null

要求:

  • 字符串必须使用双引号表示,不能使用单引号。
  • 对象的键名最好放在双引号里面。
  • 成员之间使用逗号隔开
  • 复合数据类型之间可以嵌套

例如:

{
        "name":"伟杰老师",
        "age":18,
        "pengyou":["张三","李四","王二","麻子",{
                    "name":"野马老师",
                    "info":"像匹野马一样狂奔在技术钻研的道路上"
                  }],
        "heihei":{
          "name":"大长刀",
          "length":"40m"
        }
}

3,JSON相较于XML的优势

JSON数据量小,容易解析,传输速度更快

4,Java对JSON数据的解析方式

(1)Gson

Gson是Google公司发布的一个开放源代码的库,主要用途为序列化Java对象为JSON字符串,或反序列化JSON字符串为Java对象。

将对象序列化为JSON字符串:

public class Book {
    private String name;
    private int bookId;
    private String info;

    public Book() {}

    public Book(String name, int bookId, String info) {
        this.name = name;
        this.bookId = bookId;
        this.info = info;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getBookId() {
        return bookId;
    }

    public void setBookId(int bookId) {
        this.bookId = bookId;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", bookId=" + bookId +
                ", info='" + info + '\'' +
                '}';
    }
}

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", bookId=" + bookId +
                ", info='" + info + '\'' +
                '}';
    }
    //为了代码简洁,省去get/set方法
}
    public static void main(String[] args) {
        Book book = new Book("三国演义", 1001, "讲述了三国时期的战乱故事");
        Gson gson = new Gson();//导入json的jar包
        String s = gson.toJson(book);//传入一个对象,将其序列化为JSON字符串
        System.out.println(s);
    }

结果:
在这里插入图片描述

将JSON字符串解析为Java对象:

    public static void main(String[] args) {
    	//导入json的jar包
        Gson gson = new Gson();
        //将JSON字符串解析为指定类的对象
        Book book = gson.fromJson("{\"name\":\"三国演义\",\"bookId\":1001,\"info\":\"讲述了三国时期的战乱故事\"}", Book.class);
        System.out.println(book);
    }

结果:
在这里插入图片描述

(2)FastJson

fastjson是阿里巴巴开发的库,作用与gson类似

将对象序列化为JSON字符串:

package com.kkb.task010307;
import com.alibaba.fastjson.JSON;//引入fastjson的jar包并导入

public class Demo4 {
    public static void main(String[] args) {
        Book book = new Book("西游记", 1005, "师徒四人西天取经");
        //将对象序列化为JSON字符串
        String jsonString = JSON.toJSONString(book);
        System.out.println(jsonString);
    }
}

结果:
在这里插入图片描述

将JSON字符串(JSON对象)解析为Java对象:

package com.kkb.task010307;
import com.alibaba.fastjson.JSON;

class Demo5 {
    public static void main(String[] args) {
        //将JSON字符串解析为Java对象
        Book book = JSON.parseObject("{\"bookId\":1005,\"info\":\"师徒四人西天取经\",\"name\":\"西游记\"}", Book.class);
        System.out.println(book);
    }
}

结果:
在这里插入图片描述

将JSON字符串(JSON数组)解析为数组:

返回一个List对象

package com.kkb.task010307;
import com.alibaba.fastjson.JSON;
import java.util.List;

public class Demo6 {
    public static void main(String[] args) {
        List<Object> objectList = JSON.parseArray("[1010,\"哈哈哈\",true,null]", Object.class);
        System.out.println(objectList);
    }
}

结果:
在这里插入图片描述

注意: 使用fastjson对Java对象进行序列化时,要求该对象是一个javabean,包含get/set方法。因为fastjson对Java对象序列化时,通过get方法获取属性并序列化;而gson则是通过反射获取属性并序列化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我待Java如初恋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值