欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

1.什么是JSON

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

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

JSON 是存儲和交換文本信息的語法,類似 XML。

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

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

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

2.JSON語法

在了解到什么JSON之后,我們再來講講JSON的語法。

3.認識JSON分支

3.1 JSON字符串

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

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

字符串:這個很好解釋,指使用“”雙引號包括的字符。

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

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

3.2 JSON對象

Json對象:指符合Json格式要求的Java對象

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

3.3 JSON數(shù)組

JSON 數(shù)組其實就是包含了多個 JSON 對象的一個集合,數(shù)組是以 數(shù)組括號 [] 括起來的

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

JSON 數(shù)組并一定是要相同的 JSON 對象的集合,也可以是不同的對象,不過我在開發(fā)過程中并沒有這么使用過,感覺挺別扭的。因為如果將多個對象放進一個 JSONArray 中的話,下意識認為是相同類型的集合

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

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

4.JSONObject

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

簡單來說**JSONObject** 是根據(jù) JSON 形式在 Java 中存在的對象映射

4.1 功能特點

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

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

4.2 代碼示例

下面我們通過使用org.json庫中JSONObject類的做一個簡單示例

/**
 * @author : Leo
 * @version 1.0
 * @date 2023-11-21 19:38
 * @description :
 */
public class JSONObjectDemo{
    public static void main(String[] args) {
        // 創(chuàng)建一個JSONObject實例
        JSONObject jsonObj = new JSONObject();
        // 向這個對象添加鍵值對
        jsonObj.put("name", "Alice");
        jsonObj.put("age", 30);
        jsonObj.put("hasPet", true);
        // 輸出JSON對象的字符串表示
        System.out.println("JSON Object: " + jsonObj);
        // 訪問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對象為JSON字符串
        String jsonString = jsonObj.toString();
        System.out.println("JSON String: " + jsonString);
    }
}

5.JSONArray

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

5.1 特點

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

5.2 常用方法

  • 添加元素: 使用 put 方法來向數(shù)組中添加元素。
  • 提取元素: 可以通過索引來取數(shù)組中的元素,使用諸如 getString(index), getJSONObject(index) 等方法。
  • 修改元素: 可以通過傳遞索引和新值到 put 方法來修改數(shù)組中的元素。
  • 數(shù)組長度: 使用 length 方法可以獲取數(shù)組的長度。
  • 遍歷數(shù)組: 對JSONArray進行遍歷,通常使用for循環(huán)結(jié)合 get 方法訪問每個元素。
  • 轉(zhuǎn)換為字符串: toString 方法可以將整個數(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)造)一個JSONArray實例
        JSONArray array = new JSONArray();
        // 向數(shù)組中添加元素
        array.put("apple");
        array.put(100);
        array.put(new JSONObject().put("key", "value"));
        // 獲取數(shù)組長度
        int length = array.length();
        // 遍歷JSONArray并輸出每個元素
        for (int i = 0; i < length; i++) {
            System.out.println(array.get(i));
        }
        // 輸出整個JSONArray
        System.out.println(array.toString());
    }
}

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

5.3 應(yīng)用場景

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

6.FastJson的應(yīng)用

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

6.1 FastJson的優(yōu)點

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

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

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

使用簡單
fastjson的 API 十分簡潔。

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

6.2 在Java中引用FastJson

要在Java項目中使用FastJson,首先需要將其庫添加到項目的依賴中。如果你使用Maven來管理項目,可以在pom.xml文件中添加以下依賴:

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

6.3 示例代碼

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

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對象轉(zhuǎn)換為Json字符串

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

image-20231121195656342

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

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

image-20231121200126582

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

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

image-20231121200440267

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

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

在線校驗JSON

JSON在線格式解析

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

相關(guān)文章

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

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

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

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

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

    死磕 java同步系列之synchronized解析

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

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

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

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

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

    使用多個servlet時Spring security需要指明路由匹配策略問題

    這篇文章主要介紹了使用多個servlet時Spring security需要指明路由匹配策略問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    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種方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring?Bean創(chuàng)建流程分析講解

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

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

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

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

    Java SPI的簡單小實例

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

最新評論