首頁 > 軟體

Python中的json物件與string相互轉換教學

2022-12-01 14:02:57

首先要明確,python裡有json這個庫,但並沒有json這個類,所以所謂的json物件本質上就是一個dict;而json這個庫,用於實現dict到string、string到dict的互轉。

更具體一點,json物件(dict)轉string用json.dumps(),string轉json物件(dict)用json.loads()。(另外dump()是json輸出到檔案,load()是從檔案載入成json。)

對於哪個轉哪個用哪個常弄混的問題,可以這麼理解:以json為參照點,loads是向載入的動作靠向json所以是string轉成json物件,所以dumps是從取出的動作遠離json所以是json物件轉成string。

一、json物件(dict)轉string

1 簡單地直接轉換----使用json.dumps()

import json

# 變數為dict型別,亦即所謂的json物件
json_dict = {
    "username": "root",
    "password": "toor"
}

# 變數為str類形,json物件轉成的字串
# 值為'{"username": "root", "password": "toor"}'
json_str = json.dumps(json_dict)

# 注意如果將json_dict和json_str都使用print()直接列印出來,看不出什麼區別,因為字串型別變數print出來後最外層的引號會被脫掉
# 唯一的區別是,列印出來的json_dict鍵值都使用單引號,而json_str內層使用雙引號,外層使用單引號

2 更美觀地輸出

json物件或者說是dict型別變數是可以直接使用print()函數列印的,但只是那種所有key-value都列印在一行的形式。使用json.dumps()我們可以使用輸出成縮排形式。

import json

# 變數為dict型別,亦即所謂的json物件
json_dict = {
    "username": "root",
    "password": "toor"
}

# 變數為str類形,json物件轉成的字串
# 值為'{"username": "root", "password": "toor"}'
# json_str = json.dumps(json_dict)

# indent是縮排空格數,這裡4表示使用4空格縮排
# 值為'{n    "username": "root",    n"password": "toor"n}'
json_str = json.dumps(json_dict, indent=4)
print(json_str)

# 也可以直接使用json.dump()寫到檔案
# with open("test.txt", "r", encoding="utf-8") as fd:
#     json.dump(json_dict, fd, indent=4)

# logging模組也可以這樣轉換再列印實現縮排效果
# json_str = json.dumps(json_dict, indent=4)
# logging.info(json_str)

二、string轉json物件(dict)

常規的string----指最外層是單引號,內層鍵值是雙引號,且最後一對鍵值之後沒有逗號的字串。如’{“username”: “root”, “password”: “toor”}'。

特殊的string----指最外層是雙引號,內層鍵值是單引號,或者最一對鍵值之後有逗號的字串。如"{‘username’: ‘root’, ‘password’: ‘toor’}"或’{“username”: “root”, “password”: “toor”,}'。

如下圖可以看到,對於特殊字串如果強行使用json.loads()要將其轉換成json物件,那最外層雙引號或最後的逗號都會觸發報錯:ValueError: Expecting property name: line x column xx (char xx)

1 常規的string轉json物件(dict)----使用json.loads()

import json

# 變數為str類形,待json物件的常規字串
json_str = '{"username": "root", "password": "toor"}'
# Python學習交流群:711312441
# 變數為dict型別,亦即所謂的json物件
# {'username': 'root', 'password': 'toor'}
json_dict = json.loads(json_str)

2 特殊的string轉json物件(dict)----使用ast.literal_eval()

import ast

# 變數為str類形,待json物件的特殊字串
json_str = "{'username': 'root', 'password': 'toor'}"
# json_str = '{"username": "root", "password": "toor",}'
# json_str = "{'username': 'root', 'password': 'toor',}"

# 變數為dict型別,亦即所謂的json物件
# {'username': 'root', 'password': 'toor'}
json_dict = ast.literal_eval(json_str)

到此這篇關於Python中的json物件與string相互轉換教學的文章就介紹到這了,更多相關python json物件與string轉換內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com