【开发】JavaWeb开发中如何解析JSON格式数据

目录

前言

JSON 的数据类型

Java 解析 JSON

常用于解析 JSON 的第三方库

Jackson

 Gson

Fastjson

使用 Fastjson

Fastjson 的优点

Fastjson 的主要对象

JSON 接口

JSONObject 类

JSONArray 类


前言

1W:什么是JSON?

  • JSONJavaScrip t对象表示法(JavaScript Object Notation);

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

  • 它基于 ECMAScriptEuropean Computer Manufacturers Association,欧洲计算机协会制定的 JavaScript 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据;

2W:为什么使用JSON?

  • JSON 作为数据传输在浏览器端非常方便;

  • JSON 只允许使用 UTF-8 编码,不存在编码问题;

  • JSON 在语法上与 JavaScript 创建对象相同,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScirpt 对象;

  • 绝大多数 REST API 都选择 JSON 作为数据传输格式;

3W:JSON如何使用?

JSON 的实例,如下面代码所示

{
    "student":[
    {"name":"关山岳","age":18},
    {"name":"宏满江","age":20}
    ]
}
  • 使用大括号 { } 保存对象,每个对象由若干数据组成

  • 每个数据由 key:value 键值对组成

  • 数据之间使用逗号 分隔

  • 使用 \ 进行特殊字符的转义

  • 使用中括号 [ ] 保存数组(集合),数组(集合)可以包含多个对象


JSON 的数据类型

  • 数字(整数与浮点数)

  • 字符串(在双引号 " "中)

  • 逻辑值(true | false

  • 数组(在中括号 [ ] 中)

  • 对象(在大括号 { } 中)

  • null


Java 解析 JSON

需求:Java 对象与 JSON 格式的数据之间的相互转换

常用于解析 JSON 的第三方库

  • Jackson

maven 中央仓库:

jackson.jaricon-default.png?t=N7T8https://repo1.maven.org/maven2/org/codehaus/jackson/jackson-core-asl/1.9.13/

Jackson 的依赖坐标:

<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>

  •  Gson

maven 中央仓库:

gson.jaricon-default.png?t=N7T8https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.5/

Gson 的依赖坐标:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

  • Fastjson

maven 中央仓库:

fastjson.jaricon-default.png?t=N7T8https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/2.0.25/

Fastjson 的依赖坐标:

<dependency>
    <groupId>com.alibaba.fastjson2</groupId>
    <artifactId>fastjson2</artifactId>
    <version>2.0.25</version>
</dependency>

使用 Fastjson

Fastjson 是阿里巴巴开源 JSON 解析库,可以解析 JSON 格式的字符串,支持将 Java Bean 序列化为 JSON 字符串,也可以从 JSON 字符串反序列化到 JavaBean

Fastjson 的优点

  • 速度快:Fastjson 相对其他 JSON 库的特点是快,从2011年 fastjson 发布1.1.x版本之后,其性能从未被其他Java实现的 JSON 超越;

  • 使用广泛:Fastjson 在阿里巴巴大规模使用,在数万台服务器上部署,fastjson 在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一;

  • 测试完备:Fastjson 有非常多的 testcase,在1.2.11版本中,testcase 超过3321个。每次发布都会进行回归测试,保证质量稳定;

  • 使用简单:FastjsonAPI 十分简洁;

  • 功能完备:支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展;

Fastjson 的主要对象

Fastjson 主要使用 JSON 接口,JSONObject 类、JSONArray 类;

  • JSON 接口:提供 json 解析操作的入口方法,用于原始转换;

  • JSONObject 类:封装 json 格式的对象;

  • JSONArray 类:封装 json 格式的集合;


JSON 接口

JSON 接口的主要作用:

  • Java 对象序列化为 JSON 字符串

  • JSON 字符串反序列化为 Java 对象

JSON.toJSONString(Object object)将Java对象序列化为JSON字符串

package com.ape.app;

import com.alibaba.fastjson2.JSON;
import com.ape.bean.Student;

/**
 * @author MitsueHong
 * @version 1.0
 * @since 2024/3/7
 */
public class TestJson {
    public static void main(String[] args) {
        //实例化对象
        Student student = new Student();
        student.setStu_name("关中雪");
        student.setStu_sex(1);
        student.setStu_age(22);

        //转换为json格式的字符串
        String stuJson = JSON.toJSONString(student);
        System.out.println(stuJson);
    }

}

JSON.parseObject(String text)将 JSON 字符串反序列化为 Java 对象

package com.ape.app;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.ape.bean.Student;

/**
 * @author MitsueHong
 * @version 1.0
 * @since 2024/3/7
 */
public class TestJson {
    public static void main(String[] args) {
        //json格式数据
        String jsonStr ="{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}";

        //转换为java对象
        JSONObject jsonObject = JSON.parseObject(jsonStr);
        System.out.println("名称:"+jsonObject.getString("stu_name"));
        System.out.println("性别:"+jsonObject.getString("stu_sex"));
        System.out.println("年龄:"+jsonObject.getString("stu_age"));

    }

}

JSON.parseArray(String text)将 JSON 字符串反序列化为 JSONArray 集合数组

package com.ape.app;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;

/**
 * @author MitsueHong
 * @version 1.0
 * @since 2024/3/7
 */
public class TestJson {
    public static void main(String[] args) {

        //json格式数据
        String jsonStr ="[{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}," +
                "{\"stu_name\":\"凯楠印象\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}," +
                "{\"stu_name\":\"陈安\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}]";

        //转换成JSONArray
        JSONArray jsonArray = JSON.parseArray(jsonStr);
        for(int i=0;i<jsonArray.size();i++) {
            JSONObject object = jsonArray.getJSONObject(i);
            System.out.println(object);
        }
    }

}

 JSONObject

JSONObject 类主要用于封装 key-value 键值对数据,它继承自 LinkedHashMap 接口,所以对它的理解和使用,可以参考 Map 集合。

常用方法

  • getString(String key)

  • remove(Object key)

 JSON.parseObject(String text,Class<T> objectClass)

        //json格式数据
        String jsonStr ="{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}";

        //转换为java对象
        Student student = JSON.parseObject(jsonStr,Student.class);
        System.out.println("名称:"+student.getStu_name());
        System.out.println("性别:"+student.getStu_sex());
        System.out.println("年龄:"+student.getStu_age());


JSONArray

JSONArrayJSON 数组,JSON 数组对象中存储的是若干个 JSONObject 对象,所以类中的方法主要用于直接操作 JSONObject 对象,主要用于封装数组集合类的数据,继承自 ArrayList 类。

常用方法getJSONObject(int index)

 JSON.parseArray(String text,Class<T> objectClass)

        //json格式数据
        String jsonStr ="[{\"stu_name\":\"日薄西山\",\"stu_sex\":\"1\",\"stu_age\":\"24\"}," +
                "{\"stu_name\":\"凯楠印象\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}," +
                "{\"stu_name\":\"陈安\",\"stu_sex\":\"1\",\"stu_age\":\"25\"}]";

        //转换成JSONArray
        List<Student> studentList = JSON.parseArray(jsonStr,Student.class);
        for(Student stu : studentList) {
            System.out.println("姓名:"+ stu.getStu_name());
            System.out.println("性别:"+ stu.getStu_sex());
            System.out.println("年龄:"+ stu.getStu_age());
        }
    }

}

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值