Python .get 巢狀 JSON 值

华科云商小雪發表於2024-03-04

對於長期使用python寫程式碼的我來說,經常在Python程式碼中,使用 .get 方法來訪問巢狀在JSON結構中的值。我們知道JSON(JavaScript Object Notation)是一種常見的資料交換格式,它可以包含巢狀的鍵值對。但是在我們使用總該如何獲取巢狀物件中的值呢?

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章