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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python-if elif巢狀結構Python巢狀
- python怎麼迴圈巢狀Python巢狀
- python 字典和列表巢狀用法Python巢狀
- Python中巢狀自定義型別的JSON序列化與反序列化Python巢狀型別JSON
- 高效遍歷匹配Json資料,避免巢狀迴圈[轉]JSON巢狀
- 1.5.2 Python函式巢狀及作用域Python函式巢狀
- Python基礎之函式的巢狀Python函式巢狀
- vue元件巢狀之 - 父元件向子元件傳值Vue元件巢狀
- [work] python巢狀字典的遞迴遍歷Python巢狀遞迴
- Python的if else 巢狀 和forin while 迴圈Python巢狀While
- python 利用 for ... else 跳出雙層巢狀迴圈Python巢狀
- 列表巢狀操作巢狀
- vue路由巢狀Vue路由巢狀
- python使用引數對巢狀字典進行取值Python巢狀
- Python的if語句多層巢狀怎麼使用Python巢狀
- 第 8 節:函式-函式巢狀呼叫與返回值函式巢狀
- SCSS 巢狀屬性CSS巢狀
- SCSS 巢狀規則CSS巢狀
- 展開巢狀列表巢狀
- Locust 任務巢狀巢狀
- Oracle 巢狀表(轉)Oracle巢狀
- 巢狀類遞迴巢狀遞迴
- vue(19)巢狀路由Vue巢狀路由
- 巢狀子查詢巢狀
- Blazor巢狀傳遞Blazor巢狀
- python基礎語法迴圈巢狀和列表(一)Python巢狀
- python基礎語法迴圈巢狀和列表(二)Python巢狀
- MySQL Join原理分析(緩衝塊巢狀與索引巢狀迴圈)MySql巢狀索引
- Python入門(十八):變數作用域與巢狀函式Python變數巢狀函式
- Python巢狀定義函式增強reduce()函式功能Python巢狀函式
- html的巢狀規則HTML巢狀
- vue-router 巢狀路由Vue巢狀路由
- JavaScript字串引號巢狀JavaScript字串巢狀
- 封裝多型巢狀封裝多型巢狀
- repeater中巢狀放入RadioButtonList巢狀
- 【Qt6】巢狀 QWindowQT巢狀
- nginx 如何實現 if 巢狀Nginx巢狀
- Vue中的巢狀路由Vue巢狀路由