JSON 格式詳解

JSON 格式詳解

隨著互聯網的發展和各種 Web 應用程序的普及,數據交換已經成為了我們日常開發中的重要環節。而在各種數據交換格式中,JSON(JavaScript Object Notation)作為一種輕量級的數據交換格式,以其簡潔、易于閱讀和解析的特性,得到了廣泛應用。本文將對 JSON 格式進行詳細介紹,幫助大家更好地理解和使用它。

一、什么是 JSON?

JSON 是一種基于文本的數據交換格式,源于 JavaScript 語言,但其設計目的是獨立于語言的。目前,幾乎所有主流編程語言都支持 JSON,常用于數據存儲和網絡傳輸。

以下是B站尚硅谷javaweb課程老師的圖解:
在這里插入圖片描述
(原課程視頻鏈接:尚硅谷Javaweb教程)

JSON 的結構由兩種基本數據結構組成:對象(object)和數組(array)。對象是鍵值對的集合,而數組是有序的值集合。

二、JSON 的基本語法
1. 對象(Object)

對象表示為花括號 {} 包圍的內容,內部是多個鍵值對的集合。鍵(key)是字符串,值(value)可以是任意合法的 JSON 數據類型。鍵值對之間使用逗號 , 分隔,鍵和值之間使用冒號 : 分隔。

{"name": "Alice","age": 25,"isStudent": false
}
2. 數組(Array)

數組表示為方括號 [] 包圍的內容,內部是按順序排列的多個值。數組中的值可以是任意合法的 JSON 數據類型,不需要相同類型。

["Apple","Banana","Cherry"
]
3. 鍵值對(Key-Value Pair)

鍵值對由鍵和值組成,鍵必須是字符串,值可以是任意類型。注意鍵要用雙引號括起來。

{"key": "value"
}
4. 數據類型

JSON 支持以下幾種數據類型:

  • 字符串(String):由雙引號括起來的字符序列,如 "Hello World"
  • 數字(Number):包括整數和浮點數,如 423.14
  • 布爾值(Boolean):即 truefalse
  • 數組(Array):值的有序集合,如 [1, 2, 3]
  • 對象(Object):鍵值對的無序集合,如 {"key": "value"}
  • 空值(null):表示空數據,即 null
三、JSON 的優點
  1. 輕量級:相比 XML 等格式,JSON 更加簡潔,減少了數據傳輸量。
  2. 易于閱讀和書寫:其結構簡單,符合大多數開發者的習慣,便于閱讀和手動書寫。
  3. 解析效率高:JSON 的解析速度非常快,特別適合在瀏覽器和服務器之間進行數據交互。
  4. 良好的語言支持:幾乎所有的編程語言都提供了對 JSON 的良好支持,方便開發者在不同的技術棧中使用。
四、JSON 的常見應用場景
  1. Web API 數據傳輸:JSON 常用于 RESTful API 的請求和響應格式,用于前后端之間的數據傳輸。
  2. 配置文件:JSON 格式常用作配置文件,簡單明了,易于修改和解析。
  3. 數據存儲:一些 NoSQL 數據庫(如 MongoDB)使用 JSON 或類似 JSON 的格式來存儲數據。
  4. 跨平臺數據交換:JSON 可以用于不同平臺、不同編程語言之間的數據交換,確保數據的一致性和兼容性。
五、如何解析 JSON?

由于 JSON 格式廣泛支持,幾乎所有主流編程語言都內置了 JSON 的解析庫。以 JavaScript 和 Python 為例,簡單介紹如何解析 JSON 數據。

1. JavaScript

在 JavaScript 中,可以使用 JSON.parse() 方法將 JSON 字符串解析為 JavaScript 對象,使用 JSON.stringify() 方法將 JavaScript 對象轉換為 JSON 字符串。

let jsonString = '{"name": "Alice", "age": 25}';
let obj = JSON.parse(jsonString);
console.log(obj.name);  // 輸出: Alicelet jsonStr = JSON.stringify(obj);
console.log(jsonStr);  // 輸出: {"name":"Alice","age":25}
2. Python

在 Python 中,可以使用 json 模塊中的 loads() 方法將 JSON 字符串解析為 Python 字典,使用 dumps() 方法將 Python 字典轉換為 JSON 字符串。

import jsonjson_string = '{"name": "Alice", "age": 25}'
obj = json.loads(json_string)
print(obj['name'])  # 輸出: Alicejson_str = json.dumps(obj)
print(json_str)  # 輸出: {"name": "Alice", "age": 25}
六、JSON 與 XML 的對比

雖然 JSON 與 XML 都是常見的數據交換格式,但它們各有優劣。

  • 簡潔性:JSON 更加簡潔,數據結構的表示直觀且緊湊,而 XML 則需要冗長的標簽。
  • 可讀性:JSON 更易于閱讀,尤其是對于熟悉 JavaScript 語法的開發者。XML 標簽則可能顯得過于復雜。
  • 解析效率:JSON 的解析通常比 XML 更快,特別是在 Web 環境中。

不過,XML 也有其獨特的優勢,例如更好的描述性和更豐富的數據驗證機制(如 DTD、XSD)。因此,選擇哪種格式取決于具體應用場景。

七、注意事項
  1. 避免循環引用:JSON 不支持對象的循環引用,在轉換帶有循環引用的對象時會拋出錯誤。
  2. 大小寫敏感:JSON 的鍵名是大小寫敏感的,在使用時要特別注意。
  3. 安全性問題:在解析外部提供的 JSON 數據時,必須小心避免潛在的安全問題,防止惡意數據導致代碼執行錯誤或安全漏洞。
八、總結

JSON 作為一種輕量級的數據交換格式,憑借其簡潔、易于解析等特點,已經成為了 Web 開發中的事實標準。無論是數據傳輸、配置文件還是跨平臺數據交換,JSON 都有著廣泛的應用場景。掌握 JSON 的使用,能夠大大提高我們的開發效率,提升應用的靈活性與兼容性。

希望本文能幫助大家更好地理解 JSON 格式,在實際開發中靈活運用這一強大的工具。如果你有任何問題或建議,歡迎在評論區留言討論!


謝謝觀看!如果覺得文章對你有所幫助的話,可以點點贊,加個關注哦~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/86936.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/86936.shtml
英文地址,請注明出處:http://en.pswp.cn/web/86936.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

原型設計Axure RP網盤資源下載與安裝教程共享

對于初學者來說,我們熟悉一下其定義:?Axure RP是一款常用的快速原型設計工具?,主要用于創建應用軟件或Web網站的線框圖、流程圖、原型和規格說明文檔,廣泛應用于產品經理、UI/UX設計師等專業領域。?? 主要用戶群體&#xff1…

iframe嵌套 redirect中轉頁面 route跳轉

需求是項目A要使用iframe內嵌項目B的頁面, 由于需要嵌套的頁面很多,每個頁面路徑和參數又各不相同, 所以我們在項目B里做了一個中轉頁面,這樣就能自己掌控項目A傳遞過來的東西了; routes.js 增加一個菜單:…

IP數據報 封裝成 MAC幀 ( 目的MAC地址6B 源MAC地址6B 類型2B 數據部分 FCS校驗和4B )

將 IP 數據報(Internet Protocol Datagram)封裝成 MAC 幀 需要在數據鏈路層添加適當的頭部信息,以便在局域網內進行傳輸。這個過程涉及將網絡層(IP 層)的數據通過數據鏈路層(MAC 層)封裝成適合物…

Note2.4 機器學習:Batch Normalization Introduction

Batch Normalization(批標準化,BN)通過標準化數據的操作,使得損失函數的優化地形(optimization landscape)更加平滑,從而達到更好地訓練效果。BN常用于卷積神經網絡(CNN)…

IDEA在AI時代的智能編程實踐:從工蜂到通義靈碼的效能躍遷??

引言? 在騰訊云工作期間,我曾使用?工蜂的AI代碼補全功能,結合IntelliJ IDEA(以下簡稱IDEA)極大提升了開發效率。如今離開騰訊云,面對外部開發環境,如何繼續利用AI提升編碼效率?本文將系統梳理…

MySQL 慢查詢日志詳解

慢查詢日志(Slow Query Log)是 MySQL 提供的一種核心性能優化工具,用于記錄執行時間超過指定閾值的 SQL 語句。通過分析這些日志,可以定位數據庫性能瓶頸,優化低效查詢,提升系統整體效率。 一、慢查詢日志的…

UV安裝Python指南總結

UV安裝Python指南總結 UV是一個Python包管理工具,它可以幫助我們安裝和管理Python版本。以下是關于UV安裝Python的主要功能和用法總結。 基本使用 安裝最新版Python uv python install注意:UV使用Astral的python-build-standalone項目提供的Python發行版,而不是…

運維基礎-MYSQL數據庫-筆記

序 欠10年前自己的一份筆記,獻給今后的自己。 數據庫介紹 數據的時代 涉及的數據量大數據不隨程序的結束而消失數據被多個應用程序共享大數據 數據庫的發展史 萌芽階段:文件系統 使用磁盤文件來存儲數據初級階段:第一代數據庫 出現了網狀…

從GPTs到Real智能體:目前常見的幾種創建智能體方式

文章目錄 智能體的三個發展階段低階智能體(面向過程) VS 高階智能體(面向目標)主流智能體創建平臺實踐基礎型平臺cherry-studio豆包訊飛星火騰訊元器 高階智能體開發體系cline開發套件Coze平臺Dify開源框架Manus突破性方案 技術演進趨勢總結 智能體的三個發展階段 當前智能體技…

WPF 實現自定義數字輸入彈窗

1.前端代碼實現 <Grid><Grid.RowDefinitions><RowDefinition Height"100" /><RowDefinition Height"*" /></Grid.RowDefinitions><BorderGrid.Row"0"BorderBrush"WhiteSmoke"BorderThickness"0…

基于yolo海洋垃圾物品識別系統flask

查看完整項目包點擊文末名片 項目簡介 本項目 基于YOLO的海洋垃圾物品識別系統 旨在利用深度學習中的YOLO&#xff08;You Only Look Once&#xff09;模型&#xff0c;實現對海洋垃圾的自動識別與分類。通過構建一個基于Flask的Web應用&#xff0c;用戶可以方便地上傳圖片&…

從數據到決策:UI前端如何利用數字孿生技術提升管理效率?

hello寶子們...我們是艾斯視覺擅長ui設計、前端開發、數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩! 在數字化轉型的深水區&#xff0c;企業管理者正面臨數據過載與決策滯后的雙重挑戰 ——IDC 研…

Spring Boot高并發 鎖的使用方法

Spring Boot高并發 鎖的使用方法 在高并發場景中&#xff08;比如電商秒殺、搶票系統、轉賬交易&#xff09;&#xff0c;多個線程/用戶會同時操作同一共享資源&#xff08;如庫存、賬戶余額、訂單號&#xff09;。如果不做控制&#xff0c;會導致數據錯誤&#xff08;如庫存超…

二十九:Dynamic Prompts插件動態提示詞講解

引言:可變化提示詞,隨機抽取不固定 使用方式一:{提示詞1|提示詞2|。。。。}------從提示詞種隨機抽取生成 方式二:{25::提示詞1|75::提示詞2}------數字為每個提示詞的占比,相當于權重 方式三:{2$$提示詞1|提示詞2|提示詞3|提示詞4|。。。}從中選區2個搭配生成(可以換 比…

vscode 改注釋的顏色,默認是灰色的,想改成紅色

修改VScode編輯器默認注釋的顏色_databricks代碼中怎么設置讓注釋是灰色的-CSDN博客 //改變注釋顏色"editor.tokenColorCustomizations": {"comments": "#009933" // 注釋}, //如果后面還加內容&#xff0c;記得塊末用逗號隔開我自己用的vscdoe.…

chili3d筆記22 正交投影3d重建筆記3 面構建

雙視圖重建3d solid import { FaceNode } from "chili"; import {IDocument,IEdge,Logger,ShapeNode,XYZ } from "chili-core"; import { Graph } from "graphlib"; function pointToString(point: XYZ): string {return ${point.x.toFixed(0)}-…

Kotlin 協程使用與通信

一、協程基礎使用 1. 協程的三種創建方式 (1) launch - 啟動后臺作業 val job CoroutineScope(Dispatchers.IO).launch {// 后臺操作delay(1000)println("任務完成 ${Thread.currentThread().name}")// 輸出&#xff1a;任務完成 DefaultDispatcher-worker-1 } j…

Ubuntu服務器(公網)- Ubuntu客戶端(內網)的FRP內網穿透配置教程

以下是為Ubuntu服務器&#xff08;公網&#xff09;- Ubuntu客戶端&#xff08;內網&#xff09;的FRP內網穿透配置教程&#xff0c;基于最新版本&#xff08;2025年6月&#xff0c;使用frp_0.61.1_linux_amd64&#xff09;整理&#xff1a; 一、服務端配置&#xff08;公網Ubu…

什么是哈希函數(SHA-256)

SHA-256 是區塊鏈系統中最核心的加密基礎之一&#xff0c;尤其是在比特幣、以太坊、文件存證等場景中扮演“指紋識別器”的角色。下面是對它的詳細講解&#xff0c;包括原理、特點、用途和代碼示例。 &#x1f4cc; 一、什么是 SHA-256&#xff1f; SHA-256 是一種密碼學哈希函…

大模型的“Tomcat”:一文讀懂AI推理引擎(Inference Engine)

點擊下方“JavaEdge”&#xff0c;選擇“設為星標” 第一時間關注技術干貨&#xff01; 免責聲明~ 任何文章不要過度深思&#xff01; 萬事萬物都經不起審視&#xff0c;因為世上沒有同樣的成長環境&#xff0c;也沒有同樣的認知水平&#xff0c;更「沒有適用于所有人的解決方案…