JSON及Python操作JSON相關

lldhsds發表於2024-06-08

JSON及Python操作JSON相關

Json簡介及Python操作Json相關示例。

1. JSON概念及支援的資料型別

1.1 什麼是 JSON?

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式,易於人閱讀和編寫,同時也易於機器解析和生成。儘管 JSON 源於 JavaScript,它與程式語言無關,目前被廣泛應用於各種程式語言中。

1.2 JSON 支援的資料型別

JSON 支援以下幾種基本資料型別:

  • 兩種特殊型別:陣列(array)、物件(object)
  • 四種基礎型別:字串(string)、數字(number)、布林型(boolean)、NULL值
  1. 物件(Object)
  • 表示為一組無序的鍵值對集合,用花括號 {} 包裹。
  • 鍵必須是字串,並且用雙引號包裹。
  • 每個鍵值對之間用逗號 , 分隔。
  • 鍵和值之間用冒號 : 分隔。

示例:

{
  "name": "John",
  "age": 30,
  "isStudent": false,
  "address": {
      "city": "New York",
      "zip": "10001"
  }
}
  1. 陣列(Array)
  • 表示為一個有序的值集合,用方括號 [] 包裹。
  • 各個值之間用逗號 , 分隔。

示例:

[
  "apple",
  "banana",
  "cherry"
]

json物件和字串區別:

特性 JSON 物件 JSON 陣列
表示 花括號 {} 包裹 方括號 [] 包裹
資料形式 無序的鍵值對集合 有序的值的集合
字串(用雙引號包裹) 無鍵,只有索引
可以是任何JSON資料型別 可以是任何JSON資料型別
使用場景 表示複雜結構化資料 表示有序列表資料
  1. 字串(String)
  • 表示為一串字元序列,用雙引號 " 包裹。
  • 可以包含跳脫字元,例如 \" 表示雙引號,\\ 表示反斜槓,\n 表示換行符等。

示例:

"Hello, world!"
  1. 數字(Number)
  • 表示為整數或浮點數。
  • 可以是正數、負數,或零。

示例:

42
3.14
  1. 布林值(Boolean)

表示為 truefalse

示例:

true
false
  1. 空值(Null)

表示為空值,使用 null

示例:

null

2. 示例程式碼

2.1 讀取JSON檔案

在Python中,你可以使用json模組讀取JSON檔案。這是最常見的操作。

import json

# 讀取JSON檔案
with open('data.json', 'r', encoding='utf-8') as file:
    data = json.load(file)  # 讀取並解析JSON資料

# 列印資料
print(data)

這裡我們使用json.load()讀取並解析JSON檔案,並將結果儲存在data變數中。

2.2 寫入JSON檔案

你可以使用json.dump()將Python資料結構寫入JSON檔案。

import json

# 要寫入的Python資料
data = {
    "name": "Alice",
    "age": 30,
    "skills": ["Python", "Data Analysis", "Machine Learning"]
}

# 寫入到JSON檔案
with open('output.json', 'w', encoding='utf-8') as file:
    json.dump(data, file, indent=4)  # 使用縮排格式化輸出

這個示例使用json.dump()將字典寫入JSON檔案。

2.3 解析JSON字串

有時資料可能以JSON字串的形式存在。這時你可以使用json.loads()來解析它。

import json

# 一個JSON字串
json_str = '{"name": "Bob", "age": 25, "city": "New York"}'

# 解析JSON字串
data = json.loads(json_str)

print(data)  # {'name': 'Bob', 'age': 25, 'city': 'New York'}

2.4 將Python資料轉換為JSON字串

與解析JSON字串類似,你可以使用json.dumps()將Python資料轉換為JSON字串。

import json

# 一個Python資料結構
data = {
    "name": "Charlie",
    "hobbies": ["Reading", "Swimming", "Hiking"]
}

# 將Python資料轉換為JSON字串
json_str = json.dumps(data, indent=4)

print(json_str)  # JSON格式的字串

2.5 處理複雜JSON資料

JSON資料可以包含巢狀的結構。Python可以方便地處理這些複雜資料。

import json

# 一個包含巢狀結構的JSON
nested_json = {
    "name": "Dave",
    "age": 40,
    "children": [
        {"name": "Amy", "age": 10},
        {"name": "Ben", "age": 8}
    ],
    "contact": {
        "email": "dave@example.com",
        "phone": "+1234567890"
    }
}

# 將Python資料轉換為JSON字串
json_str = json.dumps(nested_json, indent=4)

print(json_str)

在這個示例中,我們建立了一個包含巢狀結構的Python資料,然後將其轉換為JSON字串以進行輸出。

3. 總結

3.1 json模組中load、loads、dump、dumps函式的區別總結

函式 描述 引數 返回值 用途
load 從檔案讀取JSON資料,並轉換為Python物件 - file object: 包含JSON資料的檔案物件 Python物件 從檔案中讀取並解析JSON資料
loads 從字串讀取JSON資料,並轉換為Python物件 - str: JSON格式的字串 Python物件 從字串中讀取並解析JSON資料
dump 將Python物件編碼為JSON資料並寫入檔案 - obj: Python物件
- file object: 檔案物件
將Python物件寫入檔案中
dumps 將Python物件編碼為JSON格式的字串 - obj: Python物件 JSON格式的字串 將Python物件轉換為JSON字串

3.2 JSON型別與Python型別的對照表

JSON 型別 Python 型別 示例
object dict {"name": "John", "age": 30} -> {'name': 'John', 'age': 30}
array list [1, 2, 3] -> [1, 2, 3]
string str "hello" -> 'hello'
number intfloat 42 -> 42
3.14 -> 3.14
true True true -> True
false False false -> False
null None null -> None

3.3 區分Python字典和JSON格式的字串

1. 語法上區分

  • Python 字典: 是一種記憶體中的資料結構,包含鍵值對,鍵可以是任何不可變的資料型別,值可以是任意資料型別。
  • JSON: 是一種用於資料交換的字串格式,鍵和值都必須是特定型別(鍵必須是字串,值可以是字串、數字、陣列、物件、布林值或 null)。

2. JSON和 Python 字典的使用場景

  • Python 字典:用於在 Python 程式內部處理資料。
  • JSON 字串:用於在不同系統之間交換資料(例如,前後端通訊、資料儲存等)。

相關文章