首頁 > 軟體

python與json資料的互動詳情

2022-07-21 14:02:40

一 什麼是json

json是一種獨立於程式語言和平臺的輕量級資料交換方式。和xml一樣,只是一種資料交換方式,與程式語言沒有依賴關係。各種支援json資料格式的程式語言,都會有對其進行解析的方法。xml和json都用於資料儲存和資料交換,但是現在json越來越流行,用的比xml多。json較xml的優點如下

  • xml需要用xml解析器來進行,而json則不用(主要區別)。
  • json不需要寫標籤,較簡短。
  • json的讀寫速度更快

二 json語法格式

{
    "name": "安先生",
    "age": "24"
}

如上,json資料是以key:value 的形式儲存在一對大括號{}中的,多個資料用逗號分隔,和python中的字典非常相像,但是json資料中的key和value全都是用雙引號包起來的。

三 python與json的互動

python中提供了四種與json資料打交道的方法,即json.loads(),json.load(),json.dumps()和json.dump(),下面一一進行介紹。

1. json.loads()

json.loads(): 將json物件轉換為python物件,一般是將字串轉為python的字典dict。

import json

json_data = '{"name": "安先生", "age": "24"}'
print(type(json_data))
print(json_data)
#json.loads()將json物件轉為python物件
py_data = json.loads(json_data)
print(type(py_data))
print(py_data)

輸出:

>>>
<class 'str'>
{"name": "安先生", "age": "24"}
<class 'dict'>
{'name': '安先生', 'age': '24'}

2. json.load()

json.load(): 讀取json檔案(解碼)

import json

json_data = open('../練習檔案/json.json', 'r', encoding='utf-8')
print(type(json_data))

data = json.load(json_data)
print(type(data))
print(data)

>>>
<class '_io.TextIOWrapper'>
<class 'dict'>
{'name': '安先生', 'age': '24', 'job': '軟體測試'}

3. json.dumps()

json.dumps(): 將python物件轉為json物件

import json

py_data = {"name": "張三", "age": 24, "job": "法外狂徒"}
print(type(py_data))
print(py_data)
#indent控制縮排,ensure_ascii控制編碼
json_data = json.dumps(py_data, indent=4, ensure_ascii=False)
print(type(json_data))
print(json_data)

其中indent引數是控制縮排的,ensure_ascii改變預設編碼(Unicode)

<class 'dict'>
{'name': '張三', 'age': 24, 'job': '法外狂徒'}
<class 'str'>
{
    "name": "張三",
    "age": 24,
    "job": "法外狂徒"
}

4. json.dump()

json.dump(): 向json檔案寫資料(編碼)

import json

py_data = {"name": "張三", "age": 24, "job": "法外狂徒"}
#先用json.dumps()將python物件轉為json物件
json_data = json.dumps(py_data)
with open('../練習檔案/json.json', 'w', encoding='utf-8') as f:
    json.dump(json_data, f)

#讀取資料
msg = open('../練習檔案/json.json', 'r')
msg = json.load(msg)
print(msg)

寫入的json檔案資料:

可以看到,讀寫的資料和我們想要的不一致,這是因為json.dump()預設寫的是Unicode編碼的資料,中文是不在Unicode編碼中的,所以顯示的時候就不會以中形式顯示,不過可以用json.dump()的ensure_ascii引數來控制,將其設定為False,

如下:

import json

py_data = {"name": "張三", "age": "24", "job": "法外狂徒"}

#轉換成json物件時,編碼預設為Unicode,ensure_ascii=False 取消預設編碼
with open('../練習檔案/json.json', 'w', encoding='utf-8') as f:
    json.dump(py_data, f, indent=4, ensure_ascii=False,)
#讀取資料
msg = open('../練習檔案/json.json', 'r', encoding='utf-8')
msg = json.load(msg)
print(msg)

結果如下:

>>>
{'name': '張三', 'age': '24', 'job': '法外狂徒'}

到此這篇關於python與json資料的互動詳情的文章就介紹到這了,更多相關python json資料互動內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


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