[英]How to extract specific values from JSON
我需要從加載到公共API的Json
中提取鍵和值。 目前 mi 代碼從我的extract_values
function 中提取所有值作為列表。 但我每 delta 分鍾只需要一個camera_id
及其對應的值image
。 我遇到了麻煩,因為每個get()
調用都會返回Json
中的所有值。
JSON:
"items": [
{
"timestamp": "2020-07-04T02:00:07+08:00",
"cameras": [
{
"timestamp": "2020-07-04T01:59:27+08:00",
"image": "https://images.data.gov.sg/api/traffic-images/2020/07/b0e99414-f401-47ab-b7a4-223d83f76a2c.jpg",
"location": {
"latitude": 1.27414394350065,
"longitude": 103.851316802547
},
"camera_id": "1501",
"image_metadata": {
"height": 240,
"width": 320,
"md5": "fd1f8e010c789eb59f105a8017c4170e"
}
},
...
]
預期 output:
camera_id | Image
1501 https://images.data.gov.sg/api/traffic-images/2020/07/b0e99414-f401-47ab-b7a4-223d83f76a2c.jpg
應該注意的是,我有來自不同時間戳的 N 個endpoint
url。 但我只想要來自我所有不同網址的相同camera_id
及其image
屬性。
我的代碼:
#Function to extract parameters from JSON
def extract_values(obj, key):
#Pull all values of specified key from nested JSON.
arr = []
def extract(obj, arr, key):
#Recursively search for values of key in JSON tree.
if isinstance(obj, dict):
for k, v in obj.items():
if isinstance(v, (dict, list)):
extract(v, arr, key)
elif k == key:
arr.append(v)
elif isinstance(obj, list):
for item in obj:
extract(item, arr, key)
return arr
results = extract(obj, arr, key)
return results
def getURLS():
#Retrieve url from different deltas
endpoint = "https://api.data.gov.sg/v1/transport/traffic-images"
data = requests.get(endpoint)
if (data):
data = requests.get(endpoint).json()
cam_list = extract_values(data,'camera_id')#Extract all camera_id values as list
images_list = extract_values(data,'image') #Extract all images values as list
if __name__ == "__main__":
getURLS()
我怎樣才能做到這一點? 提前致謝
在此示例中,變量req_camera_id
包含您要匹配的 camera_id。 因此,您可以根據需要遍歷子詞典。 但我認為在這種情況下你不需要遞歸調用。
import requests
req_camera_id = '1501'
endpoint = 'https://api.data.gov.sg/v1/transport/traffic-images'
response = requests.get(endpoint)
if response.status_code == 200:
data = response.json()
for item in data['items']:
for cam in item['cameras']:
camera_id = cam['camera_id']
if camera_id == req_camera_id:
image = cam['image']
print(f'{camera_id} {image}')
給出:
1501 https://images.data.gov.sg/api/traffic-images/2020/07/4c62761d-450d-4aa1-895f-c16482fa620f.jpg
items
是一個對象列表。 只需遍歷對象列表並從每個 object 中獲取您需要的值。
cam_ids = []
images = []
for item in items:
cam_ids.append(item['camera_id'])
images.appned(item['image'])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.