Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn)
環(huán)境:python-3.6.5
JSON
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,它使得人們很容易的進(jìn)行閱讀和編寫。同時(shí)也方便了機(jī)器進(jìn)行解析和生成。適用于進(jìn)行數(shù)據(jù)交互的場景,比如網(wǎng)站前臺(tái)與后臺(tái)之間的數(shù)據(jù)交互。
Python中自帶了json模塊,直接import json即可使用
官方文檔:https://docs.python.org/3/library/json.html
Json在線解析網(wǎng)站:https://www.json.cn/#
json簡單說就是javascript中的對象和數(shù)組,所以這兩種結(jié)構(gòu)就是對象和數(shù)組兩種結(jié)構(gòu),通過這兩種結(jié)構(gòu)可以表示各種復(fù)雜的結(jié)構(gòu)。
對象:對象在js中表示為{ }括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 { key:value, key:value, ... }的鍵值對的結(jié)構(gòu),在面向?qū)ο蟮恼Z言中,key為對象的屬性,value為對應(yīng)的屬性值,所以很容易理解,取值方法為 對象.key 獲取屬性值,這個(gè)屬性值的類型可以是數(shù)字、字符串、數(shù)組、對象這幾種。
數(shù)組:數(shù)組在js中是中括號(hào)[ ]括起來的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 ["Python", "javascript", "C++", ...],取值方式和所有語言中一樣,使用索引獲取,字段值的類型可以是 數(shù)字、字符串、數(shù)組、對象幾種。
json模塊使用
json模塊提供了四個(gè)功能:dumps,dump,load,loads,用于字符串和python數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換。
json.loads()
json.loads()方法將JSON文本字符串轉(zhuǎn)換為Python對象,從JSON到Python的類型轉(zhuǎn)化對照如下:
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將文本字符串轉(zhuǎn)化為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)
運(yùn)行結(jié)果:
<class 'list'>
<class 'dict'>
['a', 'b', 'c', 'd']
{'name': '小白', 'age': 1000}
說明:
JSON文本字符串中,數(shù)據(jù)應(yīng)該用雙引號(hào)括起來,不然會(huì)報(bào)錯(cuò)誤,比如上面str_list和str_dict中的值都應(yīng)該用雙引號(hào),數(shù)字就不用。
json.dumps
json.dumps()方法實(shí)現(xiàn)python類型轉(zhuǎn)化為json字符串,返回一個(gè)str對象把一個(gè)Python對象編碼轉(zhuǎn)換成Json字符串。從Python到JSON的類型轉(zhuǎn)化對照如下:
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))
運(yùn)行結(jié)果:
[1, 2, 3, 4]
{"name": "\u5c0f\u9ed1", "age": 1000}
說明:dumps方法可以將Python數(shù)據(jù)類型轉(zhuǎn)化為JSON文本字符串,但是可以看到當(dāng)有中文的時(shí)候,轉(zhuǎn)換后中文字符都變成Unicode字符,要輸出中文需要設(shè)置dumps方法的參數(shù)ensure_ascii=True設(shè)置為ensure_ascii=False。如下:
print(json.dumps(data_dict,ensure_ascii=False)) # 運(yùn)行結(jié)果:{"name": "小黑", "age": 1000}
此外,如果需要將數(shù)據(jù)保存為文本的時(shí)候,還需要指定文件的編碼格式為utf-8,比如將上面的data_dict數(shù)據(jù)(里面有中文字符)保存為data.json文件,代碼如下:
with open('data.json','w',encoding='utf-8') as f: f.write(json.dumps(data_dict,ensure_ascii=False))
否則打開保存的文件,會(huì)有亂碼。
如果要處理的是文件而不是字符串,可以使用 json.dump()和json.load()來編碼和解碼JSON數(shù)據(jù)。比如:
# 寫入數(shù)據(jù)到文件 data_list = [{'name':'小白'},{'name':'小黑'}] with open('data2.json','w',encoding='utf-8') as f: json.dump(data_list,f,ensure_ascii=False) # 從文件讀取數(shù)據(jù) with open('data2.json','r',encoding='utf-8') as f: data = json.load(f) print(data)
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python如何檢驗(yàn)樣本是否服從正態(tài)分布
這篇文章主要介紹了Python如何檢驗(yàn)樣本是否服從正態(tài)分布問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02Python3 利用face_recognition實(shí)現(xiàn)人臉識(shí)別的方法
這篇文章主要介紹了Python3 利用face_recognition實(shí)現(xiàn)人臉識(shí)別的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03Python pandas.DataFrame 找出有空值的行
這篇文章主要介紹了Python pandas.DataFrame 找出有空值的行,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09Python實(shí)戰(zhàn)之使用PyQt5構(gòu)建HTTP接口測試工具
在現(xiàn)代軟件開發(fā)中,測試接口的有效性與響應(yīng)情況變得尤為重要,本文將指導(dǎo)構(gòu)建一個(gè)簡單的HTTP接口測試工具,使用Python的PyQt5庫創(chuàng)建用戶界面,并通過requests庫發(fā)送 HTTP 請求,需要的可以參考下2024-11-11Python+Matplotlib實(shí)現(xiàn)繪制三維折線圖
立體圖視覺上層次分明色彩鮮艷,具有很強(qiáng)的視覺沖擊力,讓觀看的人駐景時(shí)間長,留下深刻的印象。今天我們就通過這篇文章來了解如何用python中的matplotlib庫繪制漂亮的三維折線圖吧2023-03-03