亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解JSON及其在Java中的應(yīng)用小結(jié)

 更新時(shí)間:2023年12月15日 09:30:50   作者:LeoToJavaer  
json它是一種輕量級(jí)的數(shù)據(jù)交換格式,由于其易于閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,因此廣泛應(yīng)用于網(wǎng)絡(luò)數(shù)據(jù)交換和配置文件,這篇文章主要介紹了深入理解JSON及其在Java中的應(yīng)用,需要的朋友可以參考下

1.什么是JSON

在現(xiàn)代的Web開(kāi)發(fā)中,JSON(JavaScript Object Notation)扮演了極其重要的角色。它是一種輕量級(jí)的數(shù)據(jù)交換格式,由于其易于閱讀和編寫,同時(shí)也易于機(jī)器解析和生成,因此廣泛應(yīng)用于網(wǎng)絡(luò)數(shù)據(jù)交換和配置文件。

JSON: JavaScript Object Notation(JavaScript 對(duì)象表示法)

JSON 是存儲(chǔ)和交換文本信息的語(yǔ)法,類似 XML。

JSON 比 XML更小、更快,更易解析。

我們來(lái)看一下到底什么是JSON數(shù)據(jù):

{
    "message": [
    { "name":"Leo" , "address":"江蘇省" }, 
    { "name":"Mary" , "address":"湖北省" }, 
    { "name":"Jack" , "address":"浙江省" }
    ]
}
  • 關(guān)于 JSON,最重要的是要理解**它是一種數(shù)據(jù)格式,不是一種編程語(yǔ)言。雖然具有相同的語(yǔ)法形式,但 JSON 并不從屬于 JavaScript。**而且,并不是只有 JavaScript 才使用 JSON,畢竟 JSON 只是一種數(shù)據(jù)格式。很多編程語(yǔ)言都有針對(duì) JSON 的解析器和序列化器。JSON 是一個(gè)輕量級(jí)的數(shù)據(jù)格式,可以簡(jiǎn)化表示復(fù)雜數(shù)據(jù)結(jié)構(gòu)的工作量。
  • JSON 使用 JavaScript 語(yǔ)法的子集表示對(duì)象、數(shù)組、字符串、數(shù)值、布爾值和 null **。
  • 即使 XML 也能表示同樣復(fù)雜的數(shù)據(jù)結(jié)果,但JSON 沒(méi)有那么煩瑣,而且在 JavaScript 中使用更便利。ECMAScript 5 定義了一個(gè)原生的 JSON 對(duì)象; JSON對(duì)象包含兩個(gè)方法: 用于解析 JavaScript Object Notation (JSON)parse() 方法,以及將對(duì)象/值轉(zhuǎn)換為 JSON字符串的 stringify() 方法。

2.JSON語(yǔ)法

在了解到什么JSON之后,我們?cè)賮?lái)講講JSON的語(yǔ)法。

3.認(rèn)識(shí)JSON分支

3.1 JSON字符串

前我一直有個(gè)困惑,分不清普通字符串,json字符串和json對(duì)象的區(qū)別。經(jīng)過(guò)一番研究終于給弄明白了。比如在Java中。

JSON字符串是將JSON數(shù)據(jù)格式化為字符串的形式。這在數(shù)據(jù)傳輸時(shí)非常有用,因?yàn)镴SON數(shù)據(jù)需要被序列化成字符串格式進(jìn)行網(wǎng)絡(luò)傳輸。例如,一個(gè)表示用戶的JSON對(duì)象可能會(huì)被轉(zhuǎn)換成這樣的字符串:

字符串:這個(gè)很好解釋,指使用“”雙引號(hào)包括的字符。

"{\"name\": \"Leo\", \"age\": 20, \"isStudent\": false}"

Json字符串:指的是符合Json格式要求的字符串。

3.2 JSON對(duì)象

Json對(duì)象:指符合Json格式要求的Java對(duì)象

{
    "name":"Leo" , 
    "age":"20",
    "isStudetn":false 
}

3.3 JSON數(shù)組

JSON 數(shù)組其實(shí)就是包含了多個(gè) JSON 對(duì)象的一個(gè)集合,數(shù)組是以 數(shù)組括號(hào) [] 括起來(lái)的

[{
    "area": "浙江杭州
    "name": "李師傅",
    "age": 25
}, 
 {
    "area": "北京海淀
    "name": "小李",
    "age": 26
}]

JSON 數(shù)組并一定是要相同的 JSON 對(duì)象的集合,也可以是不同的對(duì)象,不過(guò)我在開(kāi)發(fā)過(guò)程中并沒(méi)有這么使用過(guò),感覺(jué)挺別扭的。因?yàn)槿绻麑⒍鄠€(gè)對(duì)象放進(jìn)一個(gè) JSONArray 中的話,下意識(shí)認(rèn)為是相同類型的集合

下面 ?? 這種類型也是正確的 JSON 數(shù)組格式

[{
    "area": "湖北武漢",
    "name": "Leo",
    "age": 20
}, {
    "address": "湖北宜昌",
    "email": "Jack@qq.com",
    "phone": 198787891
}]

4.JSONObject

JSONObject是一個(gè)在Java中表示JSON對(duì)象的類,通常是由像org.json, Gson, Jackson或其他處理JSON的庫(kù)提供。以org.json庫(kù)為例,JSONObject是一個(gè)封裝了JSON數(shù)據(jù)的鍵值映射的類。這個(gè)類允許你創(chuàng)建新的JSON對(duì)象、從字符串解析JSON數(shù)據(jù)以及像操作普通Java對(duì)象一樣訪問(wèn)或修改JSON對(duì)象中的數(shù)據(jù)。

簡(jiǎn)單來(lái)說(shuō)**JSONObject** 是根據(jù) JSON 形式在 Java 中存在的對(duì)象映射

4.1 功能特點(diǎn)

JSONObject提供了一系列方法以便與JSON數(shù)據(jù)進(jìn)行交互。以下是一些常用方法:

  • 創(chuàng)建JSON對(duì)象: 使用 new 來(lái)創(chuàng)建一個(gè)空的JSONObject,或者通過(guò)傳遞一個(gè)JSON字符串來(lái)構(gòu)造一個(gè)已填充的JSONObject
  • 添加鍵值對(duì): 使用put方法可以添加鍵值對(duì),如果鍵已經(jīng)存在,將替換鍵對(duì)應(yīng)的值。
  • 獲取數(shù)據(jù): 提供了getopt系列方法來(lái)獲取鍵對(duì)應(yīng)的值。
  • get方法在鍵不存在時(shí)會(huì)拋出異常,而opt方法在找不到鍵時(shí)會(huì)返回一個(gè)默認(rèn)值(例如null)或指定的默認(rèn)值。
  • 轉(zhuǎn)換為字符串: toString()方法將JSONObject轉(zhuǎn)換成JSON格式的字符串。
  • 檢查鍵: has方法可以檢查JSONObject是否包含特定的鍵。

4.2 代碼示例

下面我們通過(guò)使用org.json庫(kù)中JSONObject類的做一個(gè)簡(jiǎn)單示例

/**
 * @author : Leo
 * @version 1.0
 * @date 2023-11-21 19:38
 * @description :
 */
public class JSONObjectDemo{
    public static void main(String[] args) {
        // 創(chuàng)建一個(gè)JSONObject實(shí)例
        JSONObject jsonObj = new JSONObject();
        // 向這個(gè)對(duì)象添加鍵值對(duì)
        jsonObj.put("name", "Alice");
        jsonObj.put("age", 30);
        jsonObj.put("hasPet", true);
        // 輸出JSON對(duì)象的字符串表示
        System.out.println("JSON Object: " + jsonObj);
        // 訪問(wèn)JSONObject中的值
        int age = jsonObj.getInt("age");
        String name = jsonObj.getString("name");
        // 輸出獲取的值
        System.out.println("Name: " + name);
        System.out.println("Age: " + age);
        // 檢查是否存在鍵
        boolean hasAge = jsonObj.has("age");
        System.out.println("Has age key? " + hasAge);
        // 轉(zhuǎn)換JSON對(duì)象為JSON字符串
        String jsonString = jsonObj.toString();
        System.out.println("JSON String: " + jsonString);
    }
}

5.JSONArray

JSONArray 是Java中用于表示JSON數(shù)組的類,類似于JSONObject,它是用來(lái)處理JSON數(shù)據(jù)中的數(shù)組類型。JSON數(shù)組是一個(gè)有序的元素集合,每個(gè)元素可以是任意類型,如字符串、數(shù)字、JSON對(duì)象、其他數(shù)組等。這個(gè)類提供了一系列的方法來(lái)創(chuàng)建、解析和操作JSON數(shù)組。

5.1 特點(diǎn)

  • 有序集合: JSONArray 中的元素按照它們被添加的順序排列。
  • 多種類型: 數(shù)組中可以包含不同類型的元素,包括其他的JSONObjectJSONArray。
  • 靈活性: 和JSONObject類似,提供了豐富的方法來(lái)操作數(shù)組。

5.2 常用方法

  • 添加元素: 使用 put 方法來(lái)向數(shù)組中添加元素。
  • 提取元素: 可以通過(guò)索引來(lái)取數(shù)組中的元素,使用諸如 getString(index), getJSONObject(index) 等方法。
  • 修改元素: 可以通過(guò)傳遞索引和新值到 put 方法來(lái)修改數(shù)組中的元素。
  • 數(shù)組長(zhǎng)度: 使用 length 方法可以獲取數(shù)組的長(zhǎng)度。
  • 遍歷數(shù)組: 對(duì)JSONArray進(jìn)行遍歷,通常使用for循環(huán)結(jié)合 get 方法訪問(wèn)每個(gè)元素。
  • 轉(zhuǎn)換為字符串: toString 方法可以將整個(gè)數(shù)組轉(zhuǎn)換成JSON格式的字符串。

示例代碼

import org.json.JSONArray;
import org.json.JSONObject;
public class JSONArrayExample {
    public static void main(String[] args) {
        // 創(chuàng)建(構(gòu)造)一個(gè)JSONArray實(shí)例
        JSONArray array = new JSONArray();
        // 向數(shù)組中添加元素
        array.put("apple");
        array.put(100);
        array.put(new JSONObject().put("key", "value"));
        // 獲取數(shù)組長(zhǎng)度
        int length = array.length();
        // 遍歷JSONArray并輸出每個(gè)元素
        for (int i = 0; i < length; i++) {
            System.out.println(array.get(i));
        }
        // 輸出整個(gè)JSONArray
        System.out.println(array.toString());
    }
}

在上面的代碼中,我們創(chuàng)建了一個(gè)JSONArray對(duì)象,并向其中添加了不同類型的元素。我們還遍歷了數(shù)組并打印了每個(gè)元素,最后,我們將整個(gè)數(shù)組轉(zhuǎn)換成了一個(gè)字符串。

5.3 應(yīng)用場(chǎng)景

JSONArray 通常用于處理那些按順序存放同類或不同類數(shù)據(jù)項(xiàng)的場(chǎng)景。在Web開(kāi)發(fā)中,當(dāng)我們從API接收到一個(gè)JSON數(shù)組,或者需要發(fā)送一個(gè)JSON數(shù)組時(shí),JSONArray成為一個(gè)理想的工具。此外,當(dāng)從JSON文件中讀取數(shù)據(jù),或者需要生成JSON格式的數(shù)據(jù)進(jìn)行本地存儲(chǔ)時(shí),也經(jīng)常會(huì)用到JSONArray。

6.FastJson的應(yīng)用

阿里官方給的定義是, fastjson 是阿里巴巴的開(kāi)源JSON解析庫(kù),它可以解析 JSON 格式的字符串,支持將 Java Bean 序列化為 JSON字符串,也可以從 JSON字符串反序列化到 JavaBean。

6.1 FastJson的優(yōu)點(diǎn)

速度快
fastjson相對(duì)其他JSON庫(kù)的特點(diǎn)是快,從2011年fastjson發(fā)布1.1.x版本之后,其性能從未被其他Java實(shí)現(xiàn)的JSON庫(kù)超越。

使用廣泛
fastjson在阿里巴巴大規(guī)模使用,在數(shù)萬(wàn)臺(tái)服務(wù)器上部署,fastjson在業(yè)界被廣泛接受。在2012年被開(kāi)源中國(guó)評(píng)選為最受歡迎的國(guó)產(chǎn)開(kāi)源軟件之一。

測(cè)試完備
fastjson有非常多的testcase,在1.2.11版本中,testcase超過(guò)3321個(gè)。每次發(fā)布都會(huì)進(jìn)行回歸測(cè)試,保證質(zhì)量穩(wěn)定。

使用簡(jiǎn)單
fastjson的 API 十分簡(jiǎn)潔。

功能完備
支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴(kuò)展。

6.2 在Java中引用FastJson

要在Java項(xiàng)目中使用FastJson,首先需要將其庫(kù)添加到項(xiàng)目的依賴中。如果你使用Maven來(lái)管理項(xiàng)目,可以在pom.xml文件中添加以下依賴:

 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.24</version>
</dependency>

6.3 示例代碼

首先我們需要先準(zhǔn)備一個(gè)Person對(duì)象。

package com.Leo.exer.json;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * @author : Leo
 * @version 1.0
 * @date 2023-11-21 19:52
 * @description :
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String name;
    private int age;
}

將Java對(duì)象轉(zhuǎn)換為Json字符串

Person person = new Person("Leo", 20);
// 1.將對(duì)象轉(zhuǎn)換為json字符串
String jsonStr = JSON.toJSONString(person);
System.out.println("jsonStr = " + jsonStr);

image-20231121195656342

將Json字符串轉(zhuǎn)換為JSONObject對(duì)象

//2.將json字符串轉(zhuǎn)換為JSONObject對(duì)象
JSONObject jsonObject = JSON.parseObject(jsonStr);
System.out.println("jsonObject = " + jsonObject);

image-20231121200126582

將JSONObject轉(zhuǎn)換為Java對(duì)象

Person person2 = JSON.toJavaObject(jsonObject, Person.class);
System.out.println("person2 = " + person2);

image-20231121200440267

7.JSON格式化網(wǎng)站

這里推薦兩個(gè)筆者比較常用的兩個(gè)網(wǎng)站

在線校驗(yàn)JSON

JSON在線格式解析

到此這篇關(guān)于深入理解JSON及其在Java中的應(yīng)用的文章就介紹到這了,更多相關(guān)JSON在Java中的應(yīng)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot實(shí)現(xiàn)簡(jiǎn)單文件上傳功能

    SpringBoot實(shí)現(xiàn)簡(jiǎn)單文件上傳功能

    這篇文章主要為大家詳細(xì)介紹了SpringBoot實(shí)現(xiàn)簡(jiǎn)單文件上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • JAVA文件讀寫例題實(shí)現(xiàn)過(guò)程解析

    JAVA文件讀寫例題實(shí)現(xiàn)過(guò)程解析

    這篇文章主要介紹了JAVA文件讀寫例題實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 死磕 java同步系列之synchronized解析

    死磕 java同步系列之synchronized解析

    這篇文章主要介紹了Java中syncronized正確使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-06-06
  • 基于JavaMail實(shí)現(xiàn)郵件發(fā)送

    基于JavaMail實(shí)現(xiàn)郵件發(fā)送

    這篇文章主要為大家詳細(xì)介紹了基于JavaMail實(shí)現(xiàn)郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 使用jxls自定義命令設(shè)置動(dòng)態(tài)行高

    使用jxls自定義命令設(shè)置動(dòng)態(tài)行高

    這篇文章主要介紹了使用jxls自定義命令設(shè)置動(dòng)態(tài)行高,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • 使用多個(gè)servlet時(shí)Spring security需要指明路由匹配策略問(wèn)題

    使用多個(gè)servlet時(shí)Spring security需要指明路由匹配策略問(wèn)題

    這篇文章主要介紹了使用多個(gè)servlet時(shí)Spring security需要指明路由匹配策略問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • SpringMVC接收java.util.Date類型數(shù)據(jù)的2種方式小結(jié)

    SpringMVC接收java.util.Date類型數(shù)據(jù)的2種方式小結(jié)

    這篇文章主要介紹了使用SpringMVC接收java.util.Date類型數(shù)據(jù)的2種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring?Bean創(chuàng)建流程分析講解

    Spring?Bean創(chuàng)建流程分析講解

    很多時(shí)候我們需要根據(jù)不同的條件在容器中加載不同的Bean,或者根據(jù)不同的條件來(lái)選擇是否在容器中加載某個(gè)Bean,這就是Bean的加載控制,一般我們可以通過(guò)編程式或注解式兩種不同的方式來(lái)完成Bean的管理
    2023-01-01
  • 基于UDP協(xié)議實(shí)現(xiàn)聊天系統(tǒng)

    基于UDP協(xié)議實(shí)現(xiàn)聊天系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于UDP協(xié)議實(shí)現(xiàn)聊天系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Java SPI的簡(jiǎn)單小實(shí)例

    Java SPI的簡(jiǎn)單小實(shí)例

    這篇文章主要介紹了Java SPI的簡(jiǎn)單小實(shí)例,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評(píng)論