json 更新字典列表和字典列表中的字段的最佳实践

k5ifujac  于 2023-06-07  发布在  其他
关注(0)|答案(1)|浏览(187)

假设输入是一个字典列表。我需要用新值更新特定字段。输入中有重复的键、值,因此无法区分需要按名称选取的字段。下面是一个例子:

test = [
{
    "key": "prog",
    "value": {
        "instance[]": [
            {
                "key": "name",
                "value": {
                    "string": "NAME"
                },
                "verif": 22222222
            },
            {
                "key": "user",
                "value": {
                    "string": "AAAAA"
                },
                "verif": 22222222
            }
        ]
    },
    "verif": 22222222
},
{
    "key": "sytem_platform",
    "value": {
        "bool": "false"
    },
    "verif": 22222222
},
{
    "key": "system_beh",
    "value": {
        "bool": "true"
    },
    "verif": 22222222
},
{
    "key": "check_beh",
    "value": {
        "bool": "true"
    },
    "verif": 22222222
},
{
    "key": "order",
    "value": {
        "instance[]": [
            {
                "key": "order_det",
                "value": {
                    "instance[]": [
                        {
                            "key": "requires",
                            "value": {
                                "string[]": []
                            },
                            "verif": 22222222
                        },
                        {
                            "key": "status",
                            "value": {
                                "string[]": []
                            },
                            "verif": 22222222
                        },
                        {
                            "key": "system_status",
                            "value": {
                                "string[]": [
                                    "sys1.out",
                                    "sys1.checking"
                                ]
                            },
                            "verif": 22222222
                        },
                        {
                            "key": "weather_status",
                            "value": {
                                "instance[]": [
                                    {
                                        "key": "humdiity",
                                        "value": {
                                            "double": 5.0
                                        },
                                        "verif": 22222222
                                    },
                                    {
                                        "key": "temp",
                                        "value": {
                                            "double": 70.0
                                        },
                                        "verif": 22222222
                                    }
                                ]
                            },
                            "verif": 22222222
                        },
                        {
                            "key": "environment",
                            "value": {
                                "string[]": []
                            },
                            "verif": 22222222
                        }
                    ]
                },
                "verif": 22222222
            }
        ]
    },
    "verif": 22222222
}

]
我试图更新它的以下部分,如添加“aaaa”和“bbb”

"instance[]": [
            {
                "key": "requires",
                "value": {
                    "string[]": ["aaaa", "bbb"]
                },

我想知道在python中是否有任何内置的库可以用于此目标?
我可以过滤掉它并将其存储在下面的列表中,但我不确定如何更新它。

newl = [d for d in test if d["key"] == "order" ]
print(newl)
#which prints
[{'key': 'order', 'value': {'instance[]': [{'key': 'order_det', 'value': {'instance[]': [{'key': 'requires', 'value': {'string[]': []}, 'verif': 22222222}, {'key': 'status', 'value': {'string[]': []}, 'verif': 22222222}, {'key': 'system_status', 'value': {'string[]': ['sys1.out', 'sys1.checking']}, 'verif': 22222222}, {'key': 'weather_status', 'value': {'instance[]': [{'key': 'humdiity', 'value': {'double': 5.0}, 'verif': 22222222}, {'key': 'temp', 'value': {'double': 70.0}, 'verif': 22222222}]}, 'verif': 22222222}, {'key': 'environment', 'value': {'string[]': []}, 'verif': 22222222}]}, 'verif': 22222222}]}, 'verif': 22222222}]
0tdrvxhp

0tdrvxhp1#

您可以使用递归来查找具有指定键的dict。

def get(o, k):
    if isinstance(o, list):
        for x in o:
            if res := get(x, k):
                return res
    elif o['key'] == k:
        return o
    elif nxt := o.get('value', {}).get('instance[]'):
        return get(nxt, k)
o = get(test, 'requires')
if o:
    o['value']['string[]'] += "aaaa", "bbb"
print(test) # test now changed

相关问题