一、什么是json文件
JSON(Java Script Object Notation)是一種通常用于以不會“對系統(tǒng)造成負擔”的方式傳輸數(shù)據(jù)(主要通過 API)的格式。基本原理是利用文本來記錄數(shù)據(jù)點,并將數(shù)據(jù)點傳輸給第三方。
JSON是一種使用文本存儲數(shù)據(jù)對象的格式。換句話說,它是一種數(shù)據(jù)結構,將對象用文本形式表示出來。盡管它來源自JavaScript,但它已成為傳輸對象的實際標準。
大多數(shù)流行的編程語言都支持JSON格式,包括Python。JSON格式的文件經(jīng)常用于API傳輸數(shù)據(jù)對象。以下是JSON字符串的示例:
{
"name": "United States",
"population": 331002651,
"capital": "Washington D.C.",
"languages": [
"English",
"Spanish"
]
}
在這個例子中,JSON數(shù)據(jù)看起來像一個Python字典。像字典一樣,JSON以鍵值對的形式傳遞數(shù)據(jù)。然而,JSON數(shù)據(jù)也可以是字符串、數(shù)字、布爾值或列表。
在JSON流行之前,XML一直是以文本格式表示數(shù)據(jù)對象的常見選擇。以下是XML格式的相同信息的示例:
<?xml version="1.0" encoding="UTF-8"?>
<country>
<name>United States</name>
<population>331002651</population>
<capital>Washington D.C.</capital>
<languages>
<language>English</language>
<language>Spanish</language>
</languages>
</country>
很明顯,JSON代碼量更少。這是JSON如此流行的主要原因之一。
JSON建構于兩種結構:
json是Javascript中的對象和數(shù)組中的對象,本質上來講就是有特定結構的字符串,所以可以通過這兩種結構可以表示各種復雜的結構:
- 1 對象: 對象在js中表示為”{}”括起來的內(nèi)容,數(shù)據(jù)結構為{key:value, key:value…}的鍵值對結構,在面向對象的語言中,key為對象的屬性,value為對應屬性的值,所以很容易去理解。屬性值value可以為:數(shù)字、字符串、數(shù)組、對象等。
- 2 數(shù)組:數(shù)組在js中是中括號“[]”括起來的內(nèi)容,數(shù)據(jù)結構為[“java”, “javascript”, “vb”….] 取值方式和所有語言一樣,使用索引獲取,字段值的類型是:數(shù)字、字符串、數(shù)組、對象等
簡單地說,JSON 可以將 JavaScript 對象中表示的一組數(shù)據(jù)轉換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個字符串,或者在異步應用程序中將字符串從 Web 客戶機傳遞給服務器端程序。這個字符串看起來有點兒古怪,但是 JavaScript 很容易解釋它,而且 JSON 可以表示比”名稱 / 值對”更復雜的結構。例如,可以表示數(shù)組和復雜的對象,而不僅僅是鍵和值的簡單列表。
如果你還不了解 JSON,可以先閱讀 JSON 教程。
二、常用接口
Python3 中可以使用 json 模塊來對 JSON 數(shù)據(jù)進行編解碼,主要包含了下面4個操作函數(shù):
提示:所謂類文件對象指那些具有read()或者 write()方法的對象,例如,f = open(‘a(chǎn).txt’,‘r’),其中的f有read()方法,所以f就是類文件對象。
Python的JSON模塊有四個主要功能:read(),reads(),load(),和loads()。這些功能常常會讓人混淆。最重要的地方是字母“s”代表String。另外,在函數(shù)loads()和dumps()中的字母“s”需要分開讀,即loads讀load-s,dumps()讀dump-s。
這是一個快速表格,可幫助您記住這些功能:
- 一般loads用于讀取JSON字符串,而load()用于讀取文件中的JSON數(shù)據(jù)。
load()方法接收一個文件對象并返回解析為Python對象的JSON數(shù)據(jù)。 - 用于編寫JSON文件的方法是dump().這種方法與dumps()方法非常相似。唯一的區(qū)別是dumps()返回一個字符串,dump()寫入一個文件。
類型轉化
在json的編解碼過程中,python 的原始類型與JSON類型會相互轉換,具體的轉化對照如下:文章來源:http://www.zghlxwxcb.cn/news/detail-478211.html
- Python 編碼為 JSON 類型轉換對應表:
- JSON 解碼為 Python 類型轉換對應表:
三、代碼示例
詳細內(nèi)容可閱讀 blog文章來源地址http://www.zghlxwxcb.cn/news/detail-478211.html
import json
data = {
'name': 'pengjunlee',
'age': 32,
'vip': True,
'address': {'province': 'GuangDong', 'city': 'ShenZhen'}
}
# 1. 將 Python字典類型 轉換為 JSON對象
json_str = json.dumps(data)
print(json_str) # 結果 {"name": "pengjunlee", "age": 32, "vip": true, "address": {"province": "GuangDong", "city": "ShenZhen"}}
# 2. 將 JSON對象類型 轉換為 Python字典
user_dic = json.loads(json_str)
print(user_dic['address']) # 結果 {'province': 'GuangDong', 'city': 'ShenZhen'}
print(user_dic.keys())
# 3. 將 Python字典 直接輸出到 文件
with open('pengjunlee.json', 'w', encoding='utf-8') as f:
json.dump(user_dic, f, ensure_ascii=False, indent=4) # 縮進4個空格
# 4. 將 類文件對象中的JSON字符串 直接轉換成 Python字典
with open('pengjunlee.json', 'r', encoding='utf-8') as f:
ret_dic = json.load(f)
print(type(ret_dic)) # 結果 <class 'dict'>
print(ret_dic['name']) # 結果 pengjunlee
- 使用eval()能夠實現(xiàn)簡單的字符串和Python類型的轉化。
user1 = eval('{"name":"pengjunlee"}')
print(user1['name']) # 結果 pengjunlee
到了這里,關于【python模塊】python解析json文件詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!