Python .get 巢狀 JSON 值
.get
1、問題背景
在 Python 中,可以使用 .get() 方法從 JSON 物件中獲取值。當 JSON 物件中巢狀了其他 JSON 物件時,如何獲取巢狀物件中的值呢?
例如,以下 JSON 物件中包含了一個名為 "product" 的巢狀物件,該物件又包含了幾個子物件。
{
"title": "Test prod",
"leafPage": true,
"type": "product",
"product": {
"title": "test product",
"offerPrice": "$19.95",
"offerPriceDetails": {
"amount": 19.95,
"text": "$19.95",
"symbol": "$"
},
"media": [
{
"link": ",
"primary": true,
"type": "image",
"xpath": "/html[1]/body[1]/div[1]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/a[1]/img[1]"
}
],
"availability": true
},
"human_language": "en",
"url": "
}
如果要獲取 "product" 物件中的 "offerPrice" 值,可以使用以下程式碼:
entry.get("product").get("offerPrice")
這樣就可以獲取到 "offerPrice" 的值 "$19.95"。
2、解決方案
但是,如果 JSON 物件中的巢狀物件不是直接使用鍵值對錶示,而是使用陣列表示,則獲取巢狀物件中的值就會變得更加複雜。
例如,以下 JSON 物件中包含了一個名為 "media" 的巢狀陣列,該陣列中包含了多個子物件。
{
"title": "Test prod",
"leafPage": true,
"type": "product",
"product": {
"title": "test product",
"offerPrice": "$19.95",
"offerPriceDetails": {
"amount": 19.95,
"text": "$19.95",
"symbol": "$"
},
"media": [
{
"link": ",
"primary": true,
"type": "image",
"xpath": "/html[1]/body[1]/div[1]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/a[1]/img[1]"
},
{
"link": ",
"primary": false,
"type": "image",
"xpath": "/html[1]/body[1]/div[1]/div[3]/div[2]/div[1]/div[1]/div[1]/div[1]/a[2]/img[1]"
}
],
"availability": true
},
"human_language": "en",
"url": "
}
如果要獲取 "media" 陣列中的第一個子物件中的 "link" 值,可以使用以下程式碼:
entry.get("product", {}).get("media", [])[0].get("link")
這樣就可以獲取到第一個子物件的 "link" 值 " "。
程式碼示例
import json
# 讀取 JSON 檔案
with open( 'data.json', 'r') as f:
data = json. load( f)
# 獲取 "product" 物件中的 "offerPrice" 值
offer_price = data. get( "product", {}). get( "offerPrice")
# 獲取 "media" 陣列中的第一個子物件的 "link" 值
media_link = data. get( "product", {}). get( "media", [])[ 0]. get( "link")
# 列印獲取到的值
print( "Offer price:", offer_price)
print( "Media link:", media_link)
在這個例子中,
.get
方法用於安全地獲取字典中的值,即使某個鍵不存在也不會導致程式崩潰。如果巢狀結構中有可能缺少某些鍵,可以使用
.get
方法來避免
KeyError
。
請注意,第二個引數是
.get
方法的預設值,如果指定鍵不存在,則返回這個預設值。在這個例子中,我們使用
{}
作為預設值,以確保即使巢狀的"address"鍵不存在,我們仍然可以安全地呼叫
.get("address", {}).get("city")
而不會導致錯誤。
來自 “ ITPUB部落格 ” ,連結:https://blog.itpub.net/70034537/viewspace-3007970/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JSON相互巢狀程式碼例項JSON巢狀
- Python 迴圈巢狀Python巢狀
- 巢狀的map轉json,怎麼整,求助巢狀JSON
- python怎麼迴圈巢狀Python巢狀
- python 字典和列表巢狀用法Python巢狀
- python 跳出巢狀迴圈方法Python巢狀
- python-if elif巢狀結構Python巢狀
- 詳解Python的函式巢狀Python函式巢狀
- Python中巢狀自定義型別的JSON序列化與反序列化Python巢狀型別JSON
- less巢狀巢狀
- Datalist巢狀巢狀
- vue元件巢狀之 - 父元件向子元件傳值Vue元件巢狀
- 高效遍歷匹配Json資料,避免巢狀迴圈[轉]JSON巢狀
- 1.5.2 Python函式巢狀及作用域Python函式巢狀
- Python基礎之函式的巢狀Python函式巢狀
- 集合框架-集合的巢狀遍歷(HashMap巢狀HashMap)框架巢狀HashMap
- 集合框架-集合的巢狀遍歷(HashMap巢狀ArrayList)框架巢狀HashMap
- 集合框架-集合的巢狀遍歷(ArrayList巢狀HashMap)框架巢狀HashMap
- 集合框架-集合的巢狀遍歷(多層巢狀)框架巢狀
- vue路由巢狀Vue路由巢狀
- angular 巢狀路由Angular巢狀路由
- 迴圈_巢狀巢狀
- 集合的巢狀巢狀
- 盒子的巢狀巢狀
- oracle巢狀表Oracle巢狀
- Oracle 巢狀表Oracle巢狀
- 列表巢狀操作巢狀
- python 利用 for ... else 跳出雙層巢狀迴圈Python巢狀
- [work] python巢狀字典的遞迴遍歷Python巢狀遞迴
- Python的if else 巢狀 和forin while 迴圈Python巢狀While
- 第 8 節:函式-函式巢狀呼叫與返回值函式巢狀
- Locust 任務巢狀巢狀
- Oracle 巢狀表(轉)Oracle巢狀
- 巢狀子查詢巢狀
- vue(19)巢狀路由Vue巢狀路由
- SCSS 巢狀屬性CSS巢狀
- SCSS 巢狀規則CSS巢狀
- Blazor巢狀傳遞Blazor巢狀