當前位置:成語大全網 - 新華字典 - 如何使用Python處理JSON數據

如何使用Python處理JSON數據

如何使用Python處理JSON數據?本篇文章就給大家介紹使用Python處理JSON數據的基本方法。有壹定的參考價值,有需要的朋友可以參考壹下,希望對妳們有所幫助。

在介紹使用Python處理JSON數據的基本方法之前,我們首先要了解壹下什麽是JSON?

JSON代表“JavaScript Object Notation”,可以說是“基於JavaScript語言符號的數據格式”。但是,該表示法僅基於JavaScript,可用於其他各種語言。

JSON是我們存儲和交換數據的壹種方式,它通過其語法實現,並在許多Web應用程序中使用。JSON的優點在於它具有人類可讀的格式,這可能是在數據傳輸中使用它的原因之壹,此外還有使用API時的有效性。

在JSON中,數據以名稱/值(name/value)對表示;大括號內存儲對象,每個名稱後跟':'(冒號),名稱/值對之間要用(逗號)分隔;方括號包含數組,值以(逗號)分隔。

JSON格式數據的示例:

{

"book1":{

"title": "Python Beginners",

"year": 2005 ,

"page": 399

},

"book2":{

"title": "Python Developers",

"year": 2006 ,

"page": 650

}

}下面我們來詳細了解壹下在Python中如何處理JSON數據。

Python使得處理JSON數據變得簡單。實現此目的的模塊是json模塊。該模塊應該包含在Python(內置)安裝中,因此妳不需要像使用PDF和Excel文件那樣安裝任何外部模塊。要使用此模塊,妳唯壹需要的是導入它(開頭寫入):

import json但是,JSON庫是做什麽的呢?此庫主要從文件或字符串解析JSON。它還將JSON解析為Python中的字典或列表,反之亦然,即將Python字典或列表轉換為JSON字符串。

讀取JSON(JSON轉Python)

讀JSON意味著將JSON轉換為Python值(對象)。如上所述,json庫將JSON解析為Python中的字典或列表。為此,我們使用loads()函數(從字符串加載),如下所示:

import json

jsonData = '{"name": "Frank", "age": 39}'

jsonToPython = json.loads(jsonData)如果要查看輸出,請執行 print jsonToPython,在這種情況下,妳將獲得以下輸出:

{'age': 39, 'name': 'Frank'}也就是說,數據作為Python字典(JSON對象數據結構)返回。

Python轉JSON

上壹節我們介紹了JSON轉Python,這壹節我們將向妳展示如何將Python值轉換(編碼)為JSON。

假設我們在Python中有以下字典:

import json

pythonDictionary = {'name':'Bob', 'age':44, 'isEmployed':True}

dictionaryToJson = json.dumps(pythonDictionary)如果我們運行 print dictionaryToJson,我們得到以下JSON數據:

{"age": 44, "isEmployed": true, "name": "Bob"}因此,此輸出被視為對象(Dictionary)的數據表示。該方法dumps()是此類操作的關鍵。

此時需要註意的是,JSON不能存儲所有類型的Python對象,只能存儲以下類型:列表; 字典; 布爾值; 數; 字符串; 沒有。因此,需要轉換任何其他類型以便存儲在JSON中。

假設我們有以下課程:

class Employee(object):

def __init__(self, name):

self.name = name假設我們創建了壹個新對象abder,如下所示:

abder = Employee('Abder')如果我們想將此對象轉換為JSON,該怎麽辦?那是json.dumps(abder)?在這種情況下,妳將收到類似於以下內容的錯誤:

Traceback (most recent call last):

File "test.py", line 8, in <module>

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但是,有解決方法嗎?幸運的是有。要解決此問題,我們可以定義類似於以下的方法:

def jsonDefault(object):

return object.__dict__然後將對象編碼為JSON,如下所示:

jsonAbder = json.dumps(abder, default=jsonDefault)如果妳運行 print jsonAbder,妳應該得到以下輸出:

{"name": "Abder"}我們現在已經將Python對象(abder)編碼為JSON。