猿问

在条件下使用 Python 解析/提取嵌套的 JSON 数据

我正在尝试从我执行发布请求的 JSON 文件中的细节中提取/解析值。


这是 JSON 文件。我试图从键“AN”中获取值。我希望能够提取诸如“ shannoncampbell_znyq1 ”、“ katiekapprelmac ”等值,以便第二行中的值不等于数字零。例如,由于katiekapprelmac的第二行值(该行是T7)不等于零,我的代码应该将其吐出(katiekapprelmac应该是输出)。然而事实并非如此。


JSON 文件:


{

"id": "jsonrpc",

"jsonrpc": "2.0",

"result": {

    "result": [

        {

            "AccountId": 697429,

            "Flags": [

                "AutoDeployed"

            ],

            "PartnerId": 287562,

            "Settings": [

                {

                    "AN": "shannoncampbell_znyq1"

                },

                {

                    "T7": "0"

                }

            ]

        },

        {

            "AccountId": 725177,

            "Flags": null,

            "PartnerId": 287562,

            "Settings": [

                {

                    "AN": "katiekapprelmac"

                },

                {

                    "T7": "5"

                }

            ]

        },

        {

            "AccountId": 689130,

            "Flags": [

                "AutoDeployed"

            ],

            "PartnerId": 287562,

            "Settings": [

                {

                    "AN": "sara-pc_wpv7h"

                },

                {

                    "T7": "0"

                }

            ]

        },

        {

            "AccountId": 697531,

            "Flags": null,

            "PartnerId": 287562,

            "Settings": [

                {

                    "AN": "kaelaweeksmac"

                },

                {

                    "T7": "0"

                }

            ]

        },

        {

            "AccountId": 615877,

            "Flags": null,

            "PartnerId": 249098,

            "Settings": [

                {

                    "AN": "elenimacbookpro"

                },

                {

                    "T7": "0"

                }

            ]

        },



慕桂英546537
浏览 234回答 2
2回答

拉丁的传说

jsonpath-ng 可以帮助您解决这个问题。from jsonpath_ng.ext import parsefound = parse(f"$..Settings").find(data)if found:    for i in found:        if ''.join(i.value[1].values()) != '0':            print(i.value[0]['AN'])

慕娘9325324

在代码中:for each in j['result']['result']:if (find_only(each['Settings'][1], 0)) != json.loads("0"):    find_all(each['Settings'][0], 0)我实际上看到,您的情况始终是True,因为您没有返回任何东西find_only()。我不知道,你为什么要使用 level 和这么多递归函数。虽然根据您发布的数据很容易提取结果。请找到下面的代码。response2 = requests.request("POST", url, data=payload2, headers=headers)j = json.loads(response2.text)for each in j['result']['result']:if each['Settings'][1]['T7'] not in ["0", 0]:    print(each['Settings'][0]['AN'])如果您的响应数据不太复杂,请发布确切的解决方案。如果您有多个键名,请查看以下代码:response2 = requests.request("POST", url, data=payload2, headers=headers)j = json.loads(response2.text)def find_all(item):    if isinstance(item, dict):        for k in item:            return item[k]    # If item is non dict and you want to return this as well on `True`.    # Uncomment below commented lines.    # else:    #     itemdef find_only(item):    if isinstance(item, dict):        for k in item:            return item[k]for each in j['result']['result']:    if (find_only(each['Settings'][1])) != str(json.loads("0")):        print(find_all(each['Settings'][0]))
随时随地看视频慕课网APP

相关分类

Python
我要回答