JSON 使用

Undefined443發表於2024-06-06

JSON

JavaScript Object Notation

表示資料的方式

Object: 鍵值對的集合,使用花括號 {} 來定義。鍵值對之間用逗號分隔。

Array: 值的有序集合,使用方括號 [] 來定義。值之間用逗號分隔。

所有 JSON 資料需要包裹在一個花括號中,類似於 JavaScript 中的物件。

JSON 中的鍵

鍵需要以字串的形式定義,即在雙引號中 " " 定義(不能是單引號)。鍵和值之間用冒號分隔。

鍵必須是唯一的,否則後定義的鍵值對會覆蓋前面的鍵值對。

JSON 中的值

值可以是以下資料型別:

  • 數字(整數或浮點數)
  • 字串(需要在雙引號中定義)
  • 布林值(true 或 false)
  • 陣列(在方括號中定義)
  • 物件(在花括號中定義)
  • null(空)

JSON 中不可以使用八進位制或十六進位制表示數字。

JSON 中沒有日期型別,因此您只能透過日期的字串(e.g. 1970-01-01)或者時間戳(e.g. 1632366361)來表示日期

JSON 中不能定義註釋

{
  "number":123,
  "float":3.14,
  "string":"C語言中文網",
  "bool":true,
  "array":[
    "employees",
    {"name":"peter", "age": 18},
    {"name":"Anna", "age": 16}
  ],
  "object":{
    "name":"C語言中文網",
    "url":"http://c.biancheng.net/"
  }
}

JSON 資料型別

簡單資料型別:

  • string
  • number
  • boolean
  • null

複雜資料型別:

  • Object
  • Array

string

JSON 中的字串需要使用雙引號定義(注意:不能使用單引號),字串中可以包含零個或多個 Unicode 字元。另外,JSON 的字串中也可以包含一些跳脫字元,例如:

跳脫字元 含義
|反斜線本身
/ 正斜線
" 雙引號
\b 退格
\f 換頁
\n 換行
\r 回車
\t 水平製表符
\u 四位的十六進位制數字

number

JSON 中不區分整型和浮點型,只支援使用 IEEE-754 雙精度浮點格式來定義數字。此外,JSON 中不能使用八進位制和十六進位制表示數字,但可以使用 e 或 E 來表示 10 的指數。

Object

物件是一個無序的鍵值對的集合。物件由花括號 { } 以及其中的若干鍵值對組成,一個物件中可以包含零個或多個鍵值對,每個鍵值對之間用逗號分隔。

整個 JSON 就是一個物件型別。

物件中的最後一個鍵值對的末尾不需要新增逗號。

Array

陣列是值的有序集合。陣列由方括號 [ ] 和其中的若干值組成,值可以是 JSON 中支援的任意型別,每個值之間用逗號分隔。

陣列中的最後一個值的末尾也不需要新增逗號。

{
  "course" : [
    "JSON 教程",
    "JavaScript 教程",
    "HTML 教程",
    {
      "website" : "C語言中文網",
      "url" : "http://c.biancheng.net"
    },
    [
      3.14,
      true
    ],
    null
  ]
}

JSON 註釋

JSON 不允許新增註釋。為了使用註釋,我們可以使用以下幾種方法:

使用特殊的鍵名

給要註釋的鍵值對新增一個同名的鍵,並在鍵名中新增一個特殊字元加以區分,如 @#?,_/ 等,然後在值中定義註釋的內容。

💡Tip: 在鍵名中新增特殊字元時,應儘量避免 :{}[] 等 JSON 中常用的字元。

{
  "@name": "網站名稱",
  "name": "C語言中文網",
  "_url": "網址",
  "url": "http://c.biancheng.net/",
  "course": "JSON 教程",
  "@charge": "0=收費; 1=免費",
  "charge": 1,
  "#list": "教程目錄",
  "list": [
    "JSON資料型別",
    "JSON物件",
    "JSON陣列"
  ],
  "message": {
    "code": 0,
    "message": "OK",
    "#data": {
      "#id": "使用者ID",
      "#type": "0=正常; 1=異常",
      "#name": "姓名",
      "#createTime": "建立時間(yyyy-MM-dd)"
    },
    "data": {
      "id": "12345",
      "type": 0,
      "name": "我的名字",
      "createTime": "2020-05-20"
    }
  }
} 

也可以直接以 “comment”,“_comment” 或 “__comment” 作為鍵名來定義註釋:

{
  "_comment": "C語言中文網(http://c.biancheng.net/)—— 一個線上學習程式設計的網站",
  "course": {
    "name": "JSON 教程",
    "url": "http://c.biancheng.net/json/index.html"
  }
}

之所以不允許新增註釋,是因為 JSON 主要是用來儲存資料的,過多的註釋會對資料的可讀性造成影響,同時也會造成資料體積變大,進而影響資料傳輸、解析的速度。

JSON5

JSON5 是由開發人員建立並在 GitHub 上釋出的 JSON 的非官方標準,可以將它看作是 JSON 的升級版。JSON5 主要是透過引入部分 ECMAScript5.1 的特性來擴充套件 JSON 語法,減少 JSON 的某些限制,同時相容現有的 JSON 格式。

與 JSON 相比,JSON5 做出瞭如下改變:

  • 在物件或陣列的末尾(即最後一個鍵值對或值)可以新增逗號
  • 字串可以使用單引號定義
  • 字串中可以包含跳脫字元,並且可以跨越多行
  • 可以定義十六進位制的數字
  • 數字可以包含前導或後導的小數點
  • 數字前可以新增一個加、減號來表示正負數
  • 可以使用 // 來定義單行註釋,使用 /* ... */ 來定義多行註釋

使用 JSON5

JSON Schema

JSON Schema 可以用來限定要在 JSON 中出現的欄位、欄位含義、欄位型別等資訊。詳見 JSON Schema(模式)

JSON Schema 官網查詢合適的 JSON Schema 庫,或者透過線上工具來使用 Schema。

JSON 對比工具

JSON 對比工具

使用 VS Code 進行對比:選中要對比的檔案,在右鍵選單中選擇 “Select for Compare”,然後選中第二個要對比的檔案,在右鍵選單中選擇 “Compare with Selected”。

JSON 在程式語言中的解析和建立

Python

Java

Ajax

相關文章