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

2024-09-29 19:27:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个JSON文件中提取/解析值,该文件是我发出post请求的。在

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

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"
                }
            ]
        },
        {
            "AccountId": 700661,
            "Flags": null,
            "PartnerId": 287562,
            "Settings": [
                {
                    "AN": "sethnickersonmac"
                },
                {
                    "T7": "0"
                }
            ]
        },

这是我的python代码:

^{pr2}$

相反,我得到输出中的所有键。我得到以下信息:

shannoncampbell_znyq1
katiekapprelmac
sara-pc_wpv7h
kaelaweeksmac
elenimacbookpro
sethnickersonmac

而不仅仅是katiekaprelmac

请帮忙。谢谢


Tags: 文件代码anjsonsettingsresultnulljsonrpc
2条回答

在准则中:

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和这么多递归函数。虽然很容易根据你发布的数据提取结果。请查找以下代码。在

^{pr2}$

如果你的回答数据有点复杂,那么请张贴准确的解决方案。在

如果您有多个密钥名称,请查看以下代码:

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:
    #     item
def 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]))

jsonpath ng可以帮助您实现这一点。在

from jsonpath_ng.ext import parse

found = parse(f"$..Settings").find(data)
if found:
    for i in found:
        if ''.join(i.value[1].values()) != '0':
            print(i.value[0]['AN'])

相关问题 更多 >

    热门问题