为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英546537 2021-10-10 18:57:34
我正在尝试从我执行发布请求的 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"                }            ]        },
查看完整描述

2 回答

?
拉丁的传说

TA贡献1789条经验 获得超8个赞

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'])


查看完整回答
反对 回复 2021-10-10
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

在代码中:


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:

    #     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]))


查看完整回答
反对 回复 2021-10-10
  • 2 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信