iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 11
1
自我挑戰組

從python入門到物聯網系列 第 11

Day11 - Python 如何處理 JSON

10天過去了呢!但是還有20天/images/emoticon/emoticon31.gif
鐵人賽發文篇數已經來到第二頁了!!!
今天來介紹一下 Python 如何處理 JSON 格式啦。

JSON 介紹

網路上很多資料的傳輸格式都是使用json
所以對於json資料處理就很重要啦!

JSON(JavaScript Object Notation)輕量級的資料交換語言,容易閱讀的文字為主,用來傳輸由屬性值或者序列性的值組成的資料物件。

JSON格式:

  • 陣列(array)用中括號 [ ]

範例:

[0,5,6,2,7,8,4]
  • 物件(object)用大括號 { }
    key-value的方式儲存

範例:

{
  "id": 123,
  "Name": "wsrsw",
  "Email": "wsrsw@example.com",
  "contents": [
    {
      "subject":"Math", 
      "score":80
    },
    {
      "subject":"English", 
      "score":90
    }
  ]
}

JSON 模組

json是現有REST API的主流形式。json的編碼和解碼在python 中可以透過json套件完成。
json與python資料類型轉換關係表:

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

Python物件與JSON類型轉換

JSON字串轉Python dict

python json字串轉成python物件
需要使用json模塊的loads()

import json
str1 = '{"id": 123, "Name": "wsrsw", "Email": "wsrsw@example.com"}'
j = json.loads(str1)

print(j)
print(type(j))

結果:

{'id': 123, 'Name': 'wsrsw', 'Email': 'wsrsw@example.com'}
<class 'dict'>

dict轉JSON字串

python物件轉json字串
需要使用json模塊的dumps()

import json
j = {'id': 123, 'Name': 'wsrsw', 'Email': 'wsrsw@example.com'}
str1 = json.dumps(j)

print(str1)
print(type(str1))

結果:

{"id": 123, "Name": "wsrsw", "Email": "wsrsw@example.com"}
<class 'str'>

dict包含list轉JSON字串

可以使用indent => 可以使得數據存儲的格式容易解讀。

import json

#字典
python_dict = {"id":[1,2,3], "name": ["Tim", "Bob", "Lucy"]}
print(python_dict, type(python_dict))

#轉成json字串
j = json.dumps(python_dict, indent = 4)
print(j, type(j))

結果:

{'id': [1, 2, 3], 'name': ['Tim', 'Bob', 'Lucy']} <class 'dict'>
{
    "id": [
        1,
        2,
        3
    ],
    "name": [
        "Tim",
        "Bob",
        "Lucy"
    ]
} <class 'str'>

總結

  1. json.dumps()
    將python物件轉成json字串,返回type為str
    從python物件轉換為json字串

  2. json.loads()
    將json字串,返回python物件,返回type為dict
    從json字串轉換為python物件

參考資料

王者歸來:精通物聯網及Python / 作者: 劉凱


上一篇
Day10 - 字串處理
下一篇
Day12 - 檔案 I/O
系列文
從python入門到物聯網30

尚未有邦友留言

立即登入留言