Python爬蟲筆記5-JSON格式數
- 2020 年 1 月 3 日
- 筆記
環境:python-3.6.5
JSON
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,它使得人們很容易的進行閱讀和編寫。同時也方便了機器進行解析和生成。適用於進行數據交互的場景,比如網站前台與後台之間的數據交互。 Python中自帶了json模塊,直接import json
即可使用
官方文檔:http://docs.python.org/librar… Json在線解析網站:http://www.json.cn/#
json簡單說就是javascript
中的對象
和數組
,所以這兩種結構就是對象和數組兩種結構,通過這兩種結構可以表示各種複雜的結構。
對象:對象在js中表示為{ }括起來的內容,數據結構為 { key:value, key:value, … }的鍵值對的結構,在面向對象的語言中,key為對象的屬性,value為對應的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個屬性值的類型可以是數字、字符串、數組、對象這幾種。數組:數組在js中是中括號[ ]括起來的內容,數據結構為 ["Python", "javascript", "C++", …],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數字、字符串、數組、對象幾種。
json模塊使用
json模塊提供了四個功能:dumps
,dump
,load
,loads
,用於字符串和python數據類型進行轉換。
json.loads() json.loads()
方法將JSON文本字符串轉換為Python對象,從JSON到Python的類型轉化對照如下:
JSON |
Python |
---|---|
object |
dict |
array |
list |
string |
unicode |
number(int) |
int |
number(real) |
float |
true |
True |
false |
False |
null |
None |
示例:
import json # JSON文本字符串 str_list = '["a","b","c","d"]' str_dict = '{"name":"小白","age":1000}' # json.loads將文本字符串轉化為JSON對象,在Python里就是Python對象了 data_list = json.loads(str_list) data_dict = json.loads(str_dict) print(type(data_list)) print(type(data_dict)) print(data_list) print(data_dict)
運行結果:
<class 'list'> <class 'dict'> ['a', 'b', 'c', 'd'] {'name': '小白', 'age': 1000}
說明: JSON文本字符串中,數據應該用雙引號
括起來,不然會報錯誤,比如上面str_list和str_dict中的值都應該用雙引號,數字就不用。
json.dumps json.dumps()
方法實現python類型轉化為json字符串,返回一個str對象把一個Python對象編碼轉換成Json字符串。從Python到JSON的類型轉化對照如下:
Python |
JSON |
---|---|
dict |
object |
list,tuple |
array |
str |
string |
int, float, int- & float-derived Enums |
number |
True |
true |
False |
false |
None |
null |
示例:
import json data_list = [1,2,3,4] data_dict = {'name':'小黑','age':1000} print(json.dumps(data_list)) print(json.dumps(data_dict))
運行結果:
[1, 2, 3, 4] {"name": "u5c0fu9ed1", "age": 1000}
說明:dumps方法可以將Python數據類型轉化為JSON文本字符串,但是可以看到當有中文的時候,轉換後中文字符都變成Unicode字符,要輸出中文需要設置dumps方法的參數ensure_ascii=True
設置為ensure_ascii=False
。如下:
print(json.dumps(data_dict,ensure_ascii=False)) # 運行結果:{"name": "小黑", "age": 1000}
此外,如果需要將數據保存為文本的時候,還需要指定文件的編碼格式為utf-8
,比如將上面的data_dict
數據(裏面有中文字符)保存為data.json文件,代碼如下:
with open('data.json','w',encoding='utf-8') as f: f.write(json.dumps(data_dict,ensure_ascii=False))
否則打開保存的文件,會有亂碼。
如果要處理的是文件而不是字符串,可以使用 json.dump()
和json.load()
來編碼和解碼JSON數據。比如:
# 寫入數據到文件 data_list = [{'name':'小白'},{'name':'小黑'}] with open('data2.json','w',encoding='utf-8') as f: json.dump(data_list,f,ensure_ascii=False) # 從文件讀取數據 with open('data2.json','r',encoding='utf-8') as f: data = json.load(f) print(data)
參考資料
- 菜鳥教程:Python3 JSON 數據解析
- 靜覓崔慶才的個人博客: 5.1.2-JSON文件存儲