【问题标题】:Pulling specific values from nested dictionaries and arrays in JSON in Python从 Python 中的 JSON 中的嵌套字典和数组中提取特定值
【发布时间】:2017-08-22 09:14:37
【问题描述】:

这是对我之前提出的问题的更具体的跟进。基本上,我试图从处理 GET 请求后收到的 JSON 文本块中提取特定数据。在限制为项目之后(通过使用 dict.items() 方法),我得到了以下 JSON 数据(有很多,但这只是一个示例):

[('response',
  {'count': 84,
   'users': [{'location_id': 123456,
                   'acx_audit': None,
                   'flash_backup_url': u'',
                   'flash_backup_url_secure': u'',
                   'flash_click_variable': None,
                   'folder': None,
                   'format': u'url-json',
                   'height': 1,
                   'id': 36619222,
                   'is_prohibited': False,},
             {'location_id': 5556667,
                   'acx_audit': None,
                   'flash_backup_url': u'',
                   'flash_backup_url_secure': u'',
                   'flash_click_variable': None,
                   'folder': None,
                   'format': u'url-json',
                   'height': 1,
                   'id': 4567777,
                   'is_prohibited': False,}

我正在尝试提取的数据是这些对象中的每一个的“id”编号(不是“location_id”),并将所有这些编号收集到一个数组中。我有点挣扎,因为我不习惯使用像这样的大型 JSON 数据结构,其中字典和数组相互嵌套。我是否还必须运行一个循环来完成此操作?

任何帮助将不胜感激,因为我现在被困住了。谢谢。

【问题讨论】:

    标签: python arrays json python-2.7 dictionary


    【解决方案1】:

    可以这样做(涉及一些严格的条件检查以避免引发异常)

    inp=[('response',
      {'count': 84,
       'users': [{'location_id': 123456,
                       'acx_audit': None,
                       'flash_backup_url': u'',
                       'flash_backup_url_secure': u'',
                       'flash_click_variable': None,
                       'folder': None,
                       'format': u'url-json',
                       'height': 1,
                       'id': 36619222,
                       'is_prohibited': False},
                 {'location_id': 5556667,
                       'acx_audit': None,
                       'flash_backup_url': u'',
                       'flash_backup_url_secure': u'',
                       'flash_click_variable': None,
                       'folder': None,
                       'format': u'url-json',
                       'height': 1,
                       'id': 4567777,
                       'is_prohibited': False},
                    {'location_id': 5556667,
                       'acx_audit': None,
                       'flash_backup_url': u'',
                       'flash_backup_url_secure': u'',
                       'flash_click_variable': None,
                       'folder': None,
                       'format': u'url-json',
                       'height': 1,
                       'id': 4567777,
                       'is_prohibited': False},
                {'location_id': 5556667,
                       'acx_audit': None,
                       'flash_backup_url': u'',
                       'flash_backup_url_secure': u'',
                       'flash_click_variable': None,
                       'folder': None,
                       'format': u'url-json',
                       'height': 1,
                       'id': 4567777,
                       'is_prohibited': False}]})]
    output=[]
    for tup_el in inp:
        for el in tup_el:
            if type(el) is dict:
                if "users" in el.keys():
                    if type(el["users"]) is list:
                        for obj in el["users"]:
                            if "id" in obj.keys():
                                output.append(obj['id'])
    print output
    

    【讨论】:

    • 谢谢@repzero,这很好用。因此,如果我理解正确,此代码将通过 json 运行并检查它是否是一个列表、字典、键,然后在找到“id”之后,它将每个 ID 添加到数组中(这是输出)。我说的对吗?
    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-02-12
    • 2017-03-29
    • 2015-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    相关资源
    最近更新 更多