【发布时间】:2020-07-03 18:58:54
【问题描述】:
我需要从加载到公共API 的Json 中提取键和值。目前 mi 代码从我的 extract_values 函数中提取所有值作为列表。但我只需要一个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"
}
},
...
]
预期输出:
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()
我怎样才能做到这一点?提前致谢
【问题讨论】:
-
嗨,我导航到您共享的数据集。由于数据格式是 python 字典,您可以使用像 camera_id = dt["items"][0]["cameras"][0]["camera_id"] img = dt["items"][0]["cameras" ][0][“图片”]