【Python爬蟲學習筆記6】JSON文件存儲


JSON簡介

JSON(全稱JavaScript Obejct Notation,JavaScript對象標記),基於 ECMAScript (w3c制定的js規范)的一個子集,采用完全獨立於編程語言的文本格式,通過對象和數組的組合來表示數據,構造方法簡潔且其結構化程度高,是一種輕量級的數據交換格式。

在JSON中,支持很多數據類型,包括有對象、數組、整型、浮點型、布爾型、NULL類型以及字符串類型(由於是JSON基於ES,在python中,字符串必須要用雙引號,不能用單引號),而這些多個數據之間使用逗號分開。不過從本質上來說,JSON就是一個字符串。

在這些所支持的數據類型里,對象和數組是比較特殊且常用的兩種類型:

對象:在JavaScript中使用花括號{}包裹起來的內容,數據結構為{key:value…}的鍵值對結構,類似於python中的字典。

數組:在JavaScript中使用方括號[]包裹起來的內容,數據結構為[element1,element2…]的索引結構,類似於python中的列表。

JSON可以由以上兩種形式自由組合而成,並且可以無限次嵌套,是數據交換的極佳方式。

例如,一個JSON對象可以寫為如下形式:

[{
         "username":"UnikFox",
         "age":20,
         "country":"China"
},{
         "username":"Luna",
         "age":16,
         "country":"Britain"
}
]

為方便查看JSON數據,我們可以借助一個專門用於解析JSON數據的網址(https://www.json.cn/),將我們所要解析的JSON文本復制到左邊的輸入框,右邊的顯示框便會動態實時格式化顯現,同時還能檢查輸入的文本是否符合JSON語法並給出提示。

image

JSON數據的寫入和讀取

在python中,我們可以很輕松地使用內置的json庫來完成對JSON數據的相關操作。常用的操作是寫入和讀取,接下來我們對此分別進行介紹。

在此之前,我們先來做一些准備工作。

#導入json庫
import json

#設置一個用於JSON對象操作的列表
persons = [
    {
        'username':'UnikFox',
        'age':20,
        'country':'China'
    },
    {
        'username':'Luna',
        'age':16,
        'country':'Britain'
    }
]

1.JSON數據的寫入

json庫中提供了dumps()和dump()兩種方法來進行數據寫入,其中前者適用於將python對象轉化為JSON字符串,而后者則可以將python對象寫入json文件。

##json庫寫入操作

# 利用dumps()方法將python對象轉化為json字符串
json_str = json.dumps(persons)
print(type(json_str))    #<class 'str'>
print(json_str)          #[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "Britain"}]

# 利用dump()方法將python對象存儲到json文件中
with open('person.json','w',encoding='utf-8') as fp:
    json.dump(persons,fp,ensure_ascii=False)

這里要說明的地方有兩處:1.有時候我們的字符串為中文,因此在打開文件時需要設置編碼encoding;2.json文件的寫入默認為Unicode編碼,在寫入數據后會自動轉化為unicode字符,為方便中文的顯示,我們需要關閉其默認編碼’ensure_ascii=False’。

person.json文件內容(這里我們可以看到,json寫入時自動地幫我們格式化了數據,將原本地單引號轉化為了雙引號)

[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "Britain"}]

2.JSON數據的讀取

和寫入操作類似,json庫提供了loads()和load()兩種方法,前者為從JSON字符串轉化為python對象,而后者則是從文件中獲取python對象。

##json庫讀取操作

# 使用loads()方法將json字符串轉化為python對象
json_str = '[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "China"}]'
persons = json.loads(json_str)
print(persons)    #[{"username": "UnikFox", "age": 20, "country": "China"}, {"username": "Luna", "age": 16, "country": "Britain"}]

# 利用load()方法從json文件中讀取數據並存儲為python對象
with open('person.json','r',encoding='utf-8')as fp:
    persons = json.load(fp)
    print(type(persons))    #<class 'list'>
    print(persons)    #[{'username': 'UnikFox', 'age': 20, 'country': 'China'}, {'username': 'Luna', 'age': 16, 'country': 'Britain'}]

 


以上便是有關JSON文件存儲的簡單介紹和基本使用,更詳細的內容可以參考官方文檔:https://docs.python.org/3.6/library/json.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM