python中的JSON到底怎么用?
前言
最近在學(xué)習(xí)python爬蟲,在對數(shù)據(jù)進行持久化存儲的時候,會選擇使用json格式的數(shù)據(jù)進行存儲,由此就引發(fā)了一個問題,python中的JSON庫到底咋用?
以前使用JavaScript中Json.stringfy和Json.parse倒是用的飛起。
到了python中使用json庫就不會用了,這不行!!!
必須解決這個問題,由此,經(jīng)過學(xué)習(xí)后,就產(chǎn)生了下文。
內(nèi)容
簡介
JSON是一種輕量級的數(shù)據(jù)交換格式。
核心方法
python中的json庫核心方法只有4個
- json.dump
- json.dumps
- json.load
- json.loads
dump在計算機英語中是 轉(zhuǎn)存、導(dǎo)出、保存 的意思
那么就很好理解了。
dumps ,拆解開來,dump string , 轉(zhuǎn)化為字符流的數(shù)據(jù)
現(xiàn)在,我們來看一段代碼:
dic = {'name': 'tom',"age": 18,"friends": ('mick','jerry'),'text': 'hello world'}# obj --> jsonres = json.dumps(dic)print(res)# 結(jié)果:# {"name": "tom", "age": 18, "friends": ["mick", "jerry"], "text": "hello world"}json中字符串對應(yīng)的使用的是雙引號,所以 python中的 ‘name’ 變成了 “name”
python中tuple對應(yīng)的是json中的arr,所以出現(xiàn)了以下變化,( ‘mick’, ‘jerry’ ) — >[“mick”, “jerry”]
那么接下來我們試試dump的操作。
dump的操作實現(xiàn)的功能是將python對象轉(zhuǎn)化成json數(shù)據(jù)并存儲到文件中。
dic = {'name': 'tom',"age": 18,"friends": ('mick','jerry'),'text': 'hello world'}fp = open('./dic.json', 'w', encoding='utf-8')# obj --> json 并且將json寫入文件json.dump(dic, fp, ensure_ascii=False)# fp = file place 作用是指定文件位置和讀寫方式運行這段代碼后,自然就會生成 dic.json的文件,內(nèi)容如下所示
load的含義是加載,通過上面的學(xué)習(xí),可以以此類推 load 和 loads方法。
dump , 將python對象轉(zhuǎn)換成json數(shù)據(jù),并向文件中保存json數(shù)據(jù)。
load,從文件中讀取json數(shù)據(jù),并轉(zhuǎn)化成python對象。
dumps,python字符流轉(zhuǎn)化成 json數(shù)據(jù)流, 簡單的講,python obj — > json
loads, json數(shù)據(jù)流 加載成python字符流,簡單的講,json—> python obj
下面是一組實例:
使用json.loads方法:
# 這是一個json格式的字符串json_text = '{"name": "tom", "age": 18, "friends": ["mick", "jerry"], "text": "hello world"}'# loads = load from stringres = json.loads(json_text)print(res)# 結(jié)果:{'name': 'tom', 'age': 18, 'friends': ['mick', 'jerry'], 'text': 'hello world'}print(type(res))# 結(jié)果: <class 'dict'>使用json.load方法:
fp = open('./dic.json', 'r', encoding='utf-8')# 從文件中讀取json數(shù)據(jù)res = json.load(fp)print(res)# 結(jié)果:{'name': 'tom', 'age': 18, 'friends': ['mick', 'jerry'], 'text': 'hello world'}print(type(res))# 結(jié)果:<class 'dict'>dic.json數(shù)據(jù)如下:
總結(jié)
可以簡單的理解,loads, 加了s就是從字符流中加載,不加s就是從文件流中加載。
所以json.load(fp) , 第一個參數(shù)fp指定的是文件的位置,同時fp是必傳參數(shù),不傳就報錯。
dump和dumps同理。
特別注意:
需要特別注意的是dump在對中文進行保存的時候,中文會被默認(rèn)轉(zhuǎn)化成unicode編碼
fp = open('./dic.json', 'w', encoding='utf-8')# 張三 --- > "\u5f20\u4e09" 默認(rèn)中文會被轉(zhuǎn)化成Unicode編碼dic = {'name': '張三','age': 18}json.dump(dic, fp)運行后,可以明顯感受到 中文變成了Unicode編碼,解決辦法。
添加關(guān)鍵詞,ensure_ascii=False ,這樣就不會自動轉(zhuǎn)化成Unicode編碼了。
fp = open('./dic.json', 'w', encoding='utf-8')# 張三 --- > "\u5f20\u4e09" 默認(rèn)中文會被轉(zhuǎn)化成Unicode編碼dic = {'name': '張三','age': 18}# 這里加了 ensure_ascii=Falsejson.dump(dic, fp, ensure_ascii=False)此時中文就能正常顯示了。
附1:python和json對照表
總結(jié)
以上是生活随笔為你收集整理的python中的JSON到底怎么用?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: scrapy item引用时报错
- 下一篇: 【Python】PAT-1007-素数对