【发布时间】:2020-12-14 13:40:56
【问题描述】:
我想从我使用请求库接收的几个 JSON 对象中获取密钥。有一个我在循环中用于 API 调用的名称列表。这就是我尝试获取值的方式:
for i in name:
media_info = requests.get(URI)
print (media_info.text)
{"error":"no_transcoder"}
{"tracks":[{"bitrate":191,"channels":2,"codec":"mp3","content":"audio","lang":"eng","sample_rate":44100,"track_id":"a1"},{"bframes":3,"bitrate":3452,"codec":"h264","content":"video","fps":29.97,"gop_size":110,"height":1080,"lang":"eng","last_gop":72,"level":"4.0","pix_fmt":"yuv420p","pixel_height":1080,"pixel_width":1920,"profile":"High","sar_height":1,"sar_width":1,"track_id":"v1","width":1920}]}
{"provider":"FFmpeg","title":"Service01","tracks":[{"bframes":1,"bitrate":3717,"codec":"h264","content":"video","fps":59.94,"gop_size":69,"height":720,"last_gop":101,"level":"4.0","pix_fmt":"yuv420p","pixel_height":720,"pixel_width":1280,"profile":"High","sar_height":1,"sar_width":1,"track_id":"v1","width":1280},{"bitrate":192,"channels":2,"codec":"aac","content":"audio","sample_rate":48000,"track_id":"a1"}]}
media_data = json.loads(media_info.text)
media_json = media_data['tracks'][0]['fps']
media_info_data.append(media_json)
print (media_info_data)
[59.94]
问题是我只收到最后一个值。
即使有 {"error":"no_transcoder"},如何收集所有的 fps 密钥?
如何获取 fps、gop 和比特率密钥?
【问题讨论】:
-
你只能得到最后一个值,因为最后四行代码不在 for 循环内。
-
我知道。我试图以某种方式将它推入一个循环,但我总是崩溃。
-
当最后 4 行在循环中时,我得到 KeyError: 'tracks' 错误。我知道为什么 - 因为它试图在 {"error":"no_transcoder"} 中查找曲目。但是如何处理这种情况呢?
-
如果结果 json 有一个“错误”键,则跳过它。
if "error" in media_data: continue