【问题标题】:How to get required keys from multiple JSONs at once?如何一次从多个 JSON 中获取所需的密钥?
【发布时间】: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

标签: python json api parsing


【解决方案1】:

成功获得所需的密钥。 KeyError异常需要添加try-expect代码

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)
    if "error" in media_data: continue
    try:
        media_json = media_data['tracks'][0]['fps']
    except KeyError:
        media_json = media_data['tracks'][1]['fps']
    media_info_data.append(media_json)

【讨论】:

    猜你喜欢
    • 2019-09-22
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-01-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多