python與json數(shù)據(jù)的交互詳情
一 什么是json
json是一種獨(dú)立于編程語(yǔ)言和平臺(tái)的輕量級(jí)數(shù)據(jù)交換方式。和xml一樣,只是一種數(shù)據(jù)交換方式,與編程語(yǔ)言沒(méi)有依賴(lài)關(guān)系。各種支持json數(shù)據(jù)格式的編程語(yǔ)言,都會(huì)有對(duì)其進(jìn)行解析的方法。xml和json都用于數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)交換,但是現(xiàn)在json越來(lái)越流行,用的比xml多。json較xml的優(yōu)點(diǎn)如下
- xml需要用xml解析器來(lái)進(jìn)行,而json則不用(主要區(qū)別)。
- json不需要寫(xiě)標(biāo)簽,較簡(jiǎn)短。
- json的讀寫(xiě)速度更快
二 json語(yǔ)法格式
{
"name": "安先生",
"age": "24"
}如上,json數(shù)據(jù)是以key:value 的形式保存在一對(duì)大括號(hào){}中的,多個(gè)數(shù)據(jù)用逗號(hào)分隔,和python中的字典非常相像,但是json數(shù)據(jù)中的key和value全都是用雙引號(hào)包起來(lái)的。
三 python與json的交互
python中提供了四種與json數(shù)據(jù)打交道的方法,即json.loads(),json.load(),json.dumps()和json.dump(),下面一一進(jìn)行介紹。
1. json.loads()
json.loads(): 將json對(duì)象轉(zhuǎn)換為python對(duì)象,一般是將字符串轉(zhuǎn)為python的字典dict。
import json
json_data = '{"name": "安先生", "age": "24"}'
print(type(json_data))
print(json_data)
#json.loads()將json對(duì)象轉(zhuǎn)為python對(duì)象
py_data = json.loads(json_data)
print(type(py_data))
print(py_data)輸出:
>>>
<class 'str'>
{"name": "安先生", "age": "24"}
<class 'dict'>
{'name': '安先生', 'age': '24'}
2. json.load()
json.load(): 讀取json文件(解碼)
import json
json_data = open('../練習(xí)文件/json.json', 'r', encoding='utf-8')
print(type(json_data))
data = json.load(json_data)
print(type(data))
print(data)>>>
<class '_io.TextIOWrapper'>
<class 'dict'>
{'name': '安先生', 'age': '24', 'job': '軟件測(cè)試'}
3. json.dumps()
json.dumps(): 將python對(duì)象轉(zhuǎn)為json對(duì)象
import json
py_data = {"name": "張三", "age": 24, "job": "法外狂徒"}
print(type(py_data))
print(py_data)
#indent控制縮進(jìn),ensure_ascii控制編碼
json_data = json.dumps(py_data, indent=4, ensure_ascii=False)
print(type(json_data))
print(json_data)其中indent參數(shù)是控制縮進(jìn)的,ensure_ascii改變默認(rèn)編碼(Unicode)
<class 'dict'>
{'name': '張三', 'age': 24, 'job': '法外狂徒'}
<class 'str'>
{
"name": "張三",
"age": 24,
"job": "法外狂徒"
}4. json.dump()
json.dump(): 向json文件寫(xiě)數(shù)據(jù)(編碼)
import json
py_data = {"name": "張三", "age": 24, "job": "法外狂徒"}
#先用json.dumps()將python對(duì)象轉(zhuǎn)為json對(duì)象
json_data = json.dumps(py_data)
with open('../練習(xí)文件/json.json', 'w', encoding='utf-8') as f:
json.dump(json_data, f)
#讀取數(shù)據(jù)
msg = open('../練習(xí)文件/json.json', 'r')
msg = json.load(msg)
print(msg)寫(xiě)入的json文件數(shù)據(jù):


可以看到,讀寫(xiě)的數(shù)據(jù)和我們想要的不一致,這是因?yàn)閖son.dump()默認(rèn)寫(xiě)的是Unicode編碼的數(shù)據(jù),中文是不在Unicode編碼中的,所以顯示的時(shí)候就不會(huì)以中形式顯示,不過(guò)可以用json.dump()的ensure_ascii參數(shù)來(lái)控制,將其設(shè)置為False,
如下:
import json
py_data = {"name": "張三", "age": "24", "job": "法外狂徒"}
#轉(zhuǎn)換成json對(duì)象時(shí),編碼默認(rèn)為Unicode,ensure_ascii=False 取消默認(rèn)編碼
with open('../練習(xí)文件/json.json', 'w', encoding='utf-8') as f:
json.dump(py_data, f, indent=4, ensure_ascii=False,)
#讀取數(shù)據(jù)
msg = open('../練習(xí)文件/json.json', 'r', encoding='utf-8')
msg = json.load(msg)
print(msg)結(jié)果如下:

>>>
{'name': '張三', 'age': '24', 'job': '法外狂徒'}到此這篇關(guān)于python與json數(shù)據(jù)的交互詳情的文章就介紹到這了,更多相關(guān)python json數(shù)據(jù)交互內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python中高效的json對(duì)比庫(kù)deepdiff詳解
- python處理json文件的四個(gè)常用函數(shù)
- 使用python如何提取JSON數(shù)據(jù)指定內(nèi)容
- python如何讀取和存儲(chǔ)dict()與.json格式文件
- 利用python實(shí)現(xiàn)JSON文檔與Python對(duì)象互相轉(zhuǎn)換
- python+html實(shí)現(xiàn)前后端數(shù)據(jù)交互界面顯示的全過(guò)程
- python tkinter與Mysql數(shù)據(jù)庫(kù)交互實(shí)現(xiàn)賬號(hào)登陸
- Python與數(shù)據(jù)庫(kù)的交互問(wèn)題小結(jié)
- python實(shí)現(xiàn)與Oracle數(shù)據(jù)庫(kù)交互操作示例
- python 如何用urllib與服務(wù)端交互(發(fā)送和接收數(shù)據(jù))
- python GUI庫(kù)圖形界面開(kāi)發(fā)之PyQt5中QWebEngineView內(nèi)嵌網(wǎng)頁(yè)與Python的數(shù)據(jù)交互傳參詳細(xì)方法實(shí)例
相關(guān)文章
Python基于面向?qū)ο笞鲆粋€(gè)文件夾整理工具
這篇文章主要給大家介紹了Python基于面向?qū)ο笞鲆粋€(gè)文件夾整理工具,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02
Python實(shí)現(xiàn)圖片指定位置加圖片水?。ǜ絇yinstaller打包exe)
這篇文章主要介紹了Python實(shí)現(xiàn)圖片指定位置加圖片水印,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
使用Python的SymPy庫(kù)解決數(shù)學(xué)運(yùn)算問(wèn)題的方法
這篇文章主要介紹了使用Python的SymPy庫(kù)解決數(shù)學(xué)運(yùn)算問(wèn)題的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-03-03
python?實(shí)時(shí)獲取kafka消費(fèi)隊(duì)列信息示例詳解
這篇文章主要介紹了python實(shí)時(shí)獲取kafka消費(fèi)隊(duì)列信息,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
import?sklearn報(bào)錯(cuò)正確安裝sklearn的解決方法
這篇文章主要介紹了import?sklearn報(bào)錯(cuò)正確安裝sklearn的解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
python制作一個(gè)簡(jiǎn)單的gui 數(shù)據(jù)庫(kù)查詢(xún)界面
這篇文章主要介紹了python制作一個(gè)簡(jiǎn)單的gui 數(shù)據(jù)庫(kù)查詢(xún)界面,幫助大家更好的理解和學(xué)習(xí)python tkinter的使用,感興趣的朋友可以了解下2020-11-11
使用Python開(kāi)發(fā)SQLite代理服務(wù)器的方法
今天小編就為大家分享一篇使用Python開(kāi)發(fā)SQLite代理服務(wù)器的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12

