芝麻HTTP:JSON文件存儲

JSON,全稱爲JavaScript Object Notation, 也就是JavaScript對象標記,它經過對象和數組的組合來表示數據,構造簡潔可是結構化程度很是高,是一種輕量級的數據交換格式。本節中,咱們就來了解如何利用Python保存數據到JSON文件。javascript

1. 對象和數組

在JavaScript語言中,一切都是對象。所以,任何支持的類型均可以經過JSON來表示,例如字符串、數字、對象、數組等,可是對象和數組是比較特殊且經常使用的兩種類型,下面簡要介紹一下它們。java

  • 對象:它在JavaScript中是使用花括號{}包裹起來的內容,數據結構爲{key1:value1, key2:value2, ...}的鍵值對結構。在面向對象的語言中,key爲對象的屬性,value爲對應的值。鍵名可使用整數和字符串來表示。值的類型能夠是任意類型。
  • 數組:數組在JavaScript中是方括號[]包裹起來的內容,數據結構爲["java", "javascript", "vb", ...]的索引結構。在JavaScript中,數組是一種比較特殊的數據類型,它也能夠像對象那樣使用鍵值對,但仍是索引用得多。一樣,值的類型能夠是任意類型。

因此,一個JSON對象能夠寫爲以下形式:json

[{
    "name": "Bob",
    "gender": "male",
    "birthday": "1992-10-18"
}, {
     "name": "Selina",
    "gender": "female",
    "birthday": "1995-10-18"
}]

由中括號包圍的就至關於列表類型,列表中的每一個元素能夠是任意類型,這個示例中它是字典類型,由大括號包圍。數組

JSON能夠由以上兩種形式自由組合而成,能夠無限次嵌套,結構清晰,是數據交換的極佳方式。數據結構

2. 讀取JSON

Python爲咱們提供了簡單易用的庫來實現JSON文件的讀寫操做,咱們能夠調用庫的loads()方法將JSON文本字符串轉爲JSON對象,能夠經過dumps()方法將JSON對象轉爲文本字符串。spa

例如,這裏有一段JSON形式的字符串,它是str類型,咱們用Python將其轉換爲可操做的數據結構,如列表或字典:code

import json

str = '''
[{
    "name": "Bob",
    "gender": "male",
    "birthday": "1992-10-18"
}, {
    "name": "Selina",
    "gender": "female",
    "birthday": "1995-10-18"
}]
'''
print(type(str))
data = json.loads(str)
print(data)
print(type(data))

運行結果以下:對象

<class 'str'>
[{'name': 'Bob', 'gender': 'male', 'birthday': '1992-10-18'}, {'name': 'Selina', 'gender': 'female', 'birthday': '1995-10-18'}]
<class 'list'>

這裏使用loads()方法將字符串轉爲JSON對象。因爲最外層是中括號,因此最終的類型是列表類型。索引

這樣一來,咱們就能夠用索引來獲取對應的內容了。例如,若是想取第一個元素裏的name屬性,就可使用以下方式:ip

data[0]['name']
data[0].get('name')

獲得的結果都是:

Bob

經過中括號加0索引,能夠獲得第一個字典元素,而後再調用其鍵名便可獲得相應的鍵值。獲取鍵值時有兩種方式,一種是中括號加鍵名,另外一種是經過get()方法傳入鍵名。這裏推薦使用get()方法,這樣若是鍵名不存在,則不會報錯,會返回None。另外,get()方法還能夠傳入第二個參數(即默認值),示例以下:

data[0].get('age')
data[0].get('age', 25)

運行結果以下:

None
25

這裏咱們嘗試獲取年齡age,其實在原字典中該鍵名不存在,此時默認會返回None。若是傳入第二個參數(即默認值),那麼在不存在的狀況下返回該默認值。

值得注意的是,JSON的數據須要用雙引號來包圍,不能使用單引號。例如,若使用以下形式表示,則會出現錯誤:

import json

str = '''
[{
    'name': 'Bob',
    'gender': 'male',
    'birthday': '1992-10-18'
}]
'''
data = json.loads(str)

運行結果以下:

json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 3 column 5 (char 8)

這裏會出現JSON解析錯誤的提示。這是由於這裏數據用單引號來包圍,請千萬注意JSON字符串的表示須要用雙引號,不然loads()方法會解析失敗。

若是從JSON文本中讀取內容,例如這裏有一個data.文本文件,其內容是剛纔定義的JSON字符串,咱們能夠先將文本文件內容讀出,而後再利用loads()方法轉化:

import json

with open('data.json', 'r') as file:
    str = file.read()
    data = json.loads(str)
    print(data)

運行結果以下:

[{'name': 'Bob', 'gender': 'male', 'birthday': '1992-10-18'}, {'name': 'Selina', 'gender': 'female', 'birthday': '1995-10-18'}]

本節中,咱們瞭解了用Python進行JSON文件讀寫的方法,後面作數據解析時常常會用到,建議熟練掌握。

相關文章
相關標籤/搜索