【问题标题】:How to Parse JSON with array of Dictionary of Dictionaries in Python?如何在 Python 中使用字典字典数组解析 JSON?
【发布时间】:2020-10-02 14:46:24
【问题描述】:

我有一个 JSON 响应,其中包含一个带有字典字典的数组,我想从中提取值,但我无法。

这是 JSON 响应:

{
    "revendedoras": [
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83987199844"
                    }
                ],
                "nome": "ANA SANTOS"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83987328733"
                    }
                ],
                "nome": "MÔNICA QUEIROZ"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83987477862"
                    }
                ],
                "nome": "ROSILDA FONSECA"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83996179655"
                    }
                ],
                "nome": "MONICA RIBEIRO"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83988482748"
                    }
                ],
                "nome": "JOSEFA ZAPATA"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83987198442"
                    }
                ],
                "nome": "RAIMUNDA SILVA"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83986304403"
                    }
                ],
                "nome": "MARIA FARIAS"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83988822339"
                    }
                ],
                "nome": "EUZIR SOUZA"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83986847115"
                    }
                ],
                "nome": "FABRICIA SOARES"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83987486291"
                    }
                ],
                "nome": "MARIA NUNES"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83987752625"
                    }
                ],
                "nome": "MARIA BRITO"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83988396853"
                    }
                ],
                "nome": "MARIA LIMA"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83998633134"
                    }
                ],
                "nome": "EDIANA QUEIROZ"
            }
        },
        {
            "pessoaFisica": {
                "contatos": [
                    {
                        "tipoContato": "TELEFONE_CELULAR",
                        "valor": "83999033674"
                    }
                ],
                "nome": "ALECIANE QUEIROZ"
            }
        }
    ]
}

我需要将“valor”和“nome”中的每个数据打印出来。

这是我实现的“for”循环,但我无法获得所需的数据:

for pf in response_boticario:
    for items in pf['pessoaFisica']:
        print(items)

输出是:

C:\Users\marco\PycharmProjects\CEPs\venv\Scripts\python.exe C:/Users/marco/PycharmProjects/CEPs/main.py

contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome
contatos
nome

Process finished with exit code 0

那么,谁能指出我做错了什么?

【问题讨论】:

    标签: json python-3.x parsing


    【解决方案1】:

    您返回的项目也是字典——您需要使用 dictionary_name["key"] 语法访问它们以获取它们的值!此外,因为 contato 项目也是一个字典数组,所以您需要一个嵌套循环来访问所有项目(除非您知道您总是只有其中一个;然后您可以使用位置标识符访问它[0] 代替)。

    你会想要一些类似的东西:

    for pf in response_boticario["revendedoras"]:
        print(pf['pessoaFisica']['nome'])
        for contato in pf["pessoaFisica"]["contatos"]:
            print(contato["valor"])        
    

    【讨论】:

    • 我收到此错误:NameError: name 'items' is not defined
    • 啊,你是对的,我在没有items 变量的情况下重新做了。 @marco-almeida 我已经更新了 sn-p。
    【解决方案2】:
    for pf in response_boticario:
         contatos = pf['pessoaFisica']['contatos']
         nome = pf['pessoaFisica']['nome']
         
         for contato in contatos:
             print(contato['valor'])
    

    当你只是迭代 dict 时,你只会得到键,为了得到值,你需要使用 [] 语法来访问它,但是 Python 的 .items() 是一个很好的特性将键和值打包到一个元组中,并在每次迭代中提供它们。

    【讨论】:

    • 谢谢,您的代码获得了“nome”的值,但“contatos”的值是一个包含 2 个字典的数组,我需要其中一个字典的值,即带有键“的字典”勇气”。我已经更新了我的问题。
    • @MarcoAlmeida 我已经进行了编辑,看看是否适合你。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    相关资源
    最近更新 更多