python操作json_如何使用Python处理JSON数据
如何使用Python處理JSON數(shù)據(jù)?本篇文章就給大家介紹使用Python處理JSON數(shù)據(jù)的基本方法。有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你們有所幫助。
在介紹使用Python處理JSON數(shù)據(jù)的基本方法之前,我們首先要了解一下什么是JSON?
JSON代表“JavaScript Object Notation”,可以說是“基于JavaScript語言符號(hào)的數(shù)據(jù)格式”。但是,該表示法僅基于JavaScript,可用于其他各種語言。
JSON是我們存儲(chǔ)和交換數(shù)據(jù)的一種方式,它通過其語法實(shí)現(xiàn),并在許多Web應(yīng)用程序中使用。JSON的優(yōu)點(diǎn)在于它具有人類可讀的格式,這可能是在數(shù)據(jù)傳輸中使用它的原因之一,此外還有使用API時(shí)的有效性。
在JSON中,數(shù)據(jù)以名稱/值(name/value)對(duì)表示;大括號(hào)內(nèi)存儲(chǔ)對(duì)象,每個(gè)名稱后跟':'(冒號(hào)),名稱/值對(duì)之間要用(逗號(hào))分隔;方括號(hào)包含數(shù)組,值以(逗號(hào))分隔。
JSON格式數(shù)據(jù)的示例:{
"book1":{
"title": "Python Beginners",
"year": 2005 ,
"page": 399
},
"book2":{
"title": "Python Developers",
"year": 2006 ,
"page": 650
}
}
下面我們來詳細(xì)了解一下在Python中如何處理JSON數(shù)據(jù)。
Python使得處理JSON數(shù)據(jù)變得簡單。實(shí)現(xiàn)此目的的模塊是json模塊。該模塊應(yīng)該包含在Python(內(nèi)置)安裝中,因此你不需要像使用PDF和Excel文件那樣安裝任何外部模塊。要使用此模塊,你唯一需要的是導(dǎo)入它(開頭寫入):import json
但是,JSON庫是做什么的呢?此庫主要從文件或字符串解析JSON。它還將JSON解析為Python中的字典或列表,反之亦然,即將Python字典或列表轉(zhuǎn)換為JSON字符串。
讀取JSON(JSON轉(zhuǎn)Python)
讀JSON意味著將JSON轉(zhuǎn)換為Python值(對(duì)象)。如上所述,json庫將JSON解析為Python中的字典或列表。為此,我們使用loads()函數(shù)(從字符串加載),如下所示:import json
jsonData = '{"name": "Frank", "age": 39}'
jsonToPython = json.loads(jsonData)
如果要查看輸出,請(qǐng)執(zhí)行 print jsonToPython,在這種情況下,你將獲得以下輸出:{'age': 39, 'name': 'Frank'}
也就是說,數(shù)據(jù)作為Python字典(JSON對(duì)象數(shù)據(jù)結(jié)構(gòu))返回。
Python轉(zhuǎn)JSON
上一節(jié)我們介紹了JSON轉(zhuǎn)Python,這一節(jié)我們將向你展示如何將Python值轉(zhuǎn)換(編碼)為JSON。
假設(shè)我們?cè)赑ython中有以下字典:import json
pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True}
dictionaryToJson = json.dumps(pythonDictionary)
如果我們運(yùn)行 print dictionaryToJson,我們得到以下JSON數(shù)據(jù):{"age": 44, "isEmployed": true, "name": "Bob"}
因此,此輸出被視為對(duì)象(Dictionary)的數(shù)據(jù)表示。該方法dumps()是此類操作的關(guān)鍵。
此時(shí)需要注意的是,JSON不能存儲(chǔ)所有類型的Python對(duì)象,只能存儲(chǔ)以下類型:列表; 字典; 布爾值; 數(shù); 字符串; 沒有。因此,需要轉(zhuǎn)換任何其他類型以便存儲(chǔ)在JSON中。
假設(shè)我們有以下課程:class Employee(object):
def __init__(self, name):
self.name = name
假設(shè)我們創(chuàng)建了一個(gè)新對(duì)象abder,如下所示:abder = Employee('Abder')
如果我們想將此對(duì)象轉(zhuǎn)換為JSON,該怎么辦?那是json.dumps(abder)?在這種情況下,你將收到類似于以下內(nèi)容的錯(cuò)誤:Traceback (most recent call last):
File "test.py", line 8, in
abderJson = json.dumps(abder)
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 243, in dumps
return _default_encoder.encode(obj)
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 184, in default
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <__main__.Employee object at 0x10e74b750> is not JSON serializable
但是,有解決方法嗎?幸運(yùn)的是有。要解決此問題,我們可以定義類似于以下的方法:def jsonDefault(object):
return object.__dict__
然后將對(duì)象編碼為JSON,如下所示:jsonAbder = json.dumps(abder, default=jsonDefault)
如果你運(yùn)行 print jsonAbder,你應(yīng)該得到以下輸出:{"name": "Abder"}
我們現(xiàn)在已經(jīng)將Python對(duì)象(abder)編碼為JSON。
以上就是如何使用Python處理JSON數(shù)據(jù)的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
本文原創(chuàng)發(fā)布php中文網(wǎng),轉(zhuǎn)載請(qǐng)注明出處,感謝您的尊重!
總結(jié)
以上是生活随笔為你收集整理的python操作json_如何使用Python处理JSON数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tensorflow官方文档_Tenso
- 下一篇: golang 反射_golang原理篇-