首页 > 解决方案 > 从嵌套循环中提取数据

问题描述

我有一个场景,我在以下条件下从json响应中提取数据:

我正在循环遍历 json 并在同一父数组下找到 if 的值,然后在ifactive下找到返回值(在本例中为 260551)。如果在通过 json 循环后没有as的值或 active is 的值但在同一个父数组中type is not则返回未找到。active truecls typetypealpha1ecesactivetruetrueclsalpha1

在这里,我得到了正确的值,但是eces我怎样才能得到这个字段的值,address然后构造所有提取数据的键值映射并保存在一个 json 文件中。c_mactivetype

这是我尝试过的:

    found = False
    for di in d:
        if di.get('active', False):
            for cl in di.get('cls', []):
                if cl.get('type') == 'alpha1':
                    print(di['eces'])
                    found = True

    if not found:
        print("Not found")

所需的 json 输出:

{
    "res1": [{
        "eces": "260551",
        "res2": [{
            "c_m": 345,
            "clsfrmt": [
                {
                    "address": "{\"I_G\":\"CD\",\"I_D\":\"01\",\"I_Y\":\"C1\",\"I_XD\":\"04\",\"I_TY\":1,\"S_L\":\"https://testappsampler.com\",\"O_DC\":\"\"}",
                    "type": "Alpha"
                }
            ],
            "active": true
        }]
    }]
}

我被困在这种结构中创建 json 数据,任何帮助都会很棒。

标签: pythonjson

解决方案


虽然我建议以某种适当的方式重构此代码,但这将以非常直接的方式创建一个映射:

import json

dump = []
for di in d:
    if di.get('active', False):
        for cl in di.get('cls', []):
            if cl.get('type') == 'alpha1':
                dump.append(
                {
                    "res1": [{
                        "eces": di['eces'],
                        "res2": [{
                            "c_m": di['c_m'],
                            "clsfrmt": [
                                {
                                    "address": di['cls'][0]['address'],
                                    "type": di['cls'][0]['type']
                                }
                            ],
                            "active": di['active']
                        }]
                    }]
                }
            )

s = json.dumps(dump) # this is your JSON string

结果


推荐阅读