繁体   English   中英

替换 json 值,然后保存到新文件中

[英]Replace json value, and then save into new file

是的,有很多关于这个主题的例子......而且解决方案也是一样的。 但我不明白如何将替换的值分配回“数据”。 它似乎对其他人有用。

我已经指出了应该在“Json”下方更改的地方,“111”应该更新为“[7777777, 7777777, 7777777, 7777777, 7777777, 7777777,7777777]”。

我猜当我使用 json.dump(data, f) 进入新文件时,这里的“数据”在我加载时仍然是相同的数据,但我想我已经替换了? 所以可以再次将 json 转储到新文件中。

import json
import re

p7 = ['[7777777, 7777777, 7777777, 7777777, 7777777, 7777777 ,7777777]', '[6666666, 6666666, 6666666, 6666666, 6666666, 6666666, 6666666]', '[4444444, 4444444, 4444444, 4444444, 4444444, 4444444, 4444444]', '[1111111, 1111111, 1111111, 1111111, 1111111, 1111111, 1111111]', '[2222222, 2222222, 2222222, 2222222, 2222222, 2222222, 2222222]']
p6 = ['3333333, 3333333, 3333333, 3333333, 3333333, 3333333']
p5 = ['5555555, 5555555, 5555555, 5555555, 5555555, 5555555']
p2 = ['2121211', '3434343']
# Opening JSON file

with open('Template.json') as f:
    data = json.load(f)

rec1 = '111'
for i in data['setting']['rule']['jsonLogic']['merge'][0]['if'][1]:
    print(i)
    i = str(i).replace(rec1, str(p7[0]))
    print(i)

with open('new_data.json', 'w') as f:
    json.dump(data, f)

Json:

{
    "serviceType": "Normal",
    "setting": {
        "settingName": "TEST",
        "settingDesc": "TEST",
        "settingType": "JsonLogic",
        "productIds": "uniquethings",
        "title": null,
        "description": "",
        "rule": {
            "attrs": {
                "maxResults": "10"
            },
            "jsonLogic": {
                "merge": [{
                        "if": [{
                                "and": [{
                                        ">=": [{
                                                "var": "t1"
                                            },
                                            {
                                                "var": "t2"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t1"
                                            },
                                            {
                                                "var": "t3"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t4"
                                            },
                                            {
                                                "var": "t2"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t4"
                                            },
                                            {
                                                "var": "t3"
                                            }
                                        ]
                                    }
                                ]
                            },
                            [
                                111 #This should be changed to [7777777, 7777777, 7777777, 7777777, 
                                     7777777, 7777777 ,7777777] in new file
                            ],
                            {
                                "and": [{
                                        ">=": [{
                                                "var": "t1"
                                            },
                                            {
                                                "var": "t4"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t1"
                                            },
                                            {
                                                "var": "t3"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t2"
                                            },
                                            {
                                                "var": "t4"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t2"
                                            },
                                            {
                                                "var": "t3"
                                            }
                                        ]
                                    }
                                ]
                            },
                            [
                                222
                            ],
                            {
                                "and": [{
                                        ">=": [{
                                                "var": "t1"
                                            },
                                            {
                                                "var": "t4"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t1"
                                            },
                                            {
                                                "var": "t2"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t3"
                                            },
                                            {
                                                "var": "t4"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t3"
                                            },
                                            {
                                                "var": "t2"
                                            }
                                        ]
                                    }
                                ]
                            },
                            [
                                333
                            ],
                            {
                                "and": [{
                                        ">=": [{
                                                "var": "t4"
                                            },
                                            {
                                                "var": "t1"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t4"
                                            },
                                            {
                                                "var": "t3"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t2"
                                            },
                                            {
                                                "var": "t1"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t2"
                                            },
                                            {
                                                "var": "t3"
                                            }
                                        ]
                                    }
                                ]
                            },
                            [
                                444
                            ],
                            {
                                "and": [{
                                        ">=": [{
                                                "var": "t4"
                                            },
                                            {
                                                "var": "t1"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t4"
                                            },
                                            {
                                                "var": "t2"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t3"
                                            },
                                            {
                                                "var": "t1"
                                            }
                                        ]
                                    },
                                    {
                                        ">=": [{
                                                "var": "t3"
                                            },
                                            {
                                                "var": "t2"
                                            }
                                        ]
                                    }
                                ]
                            },
                            [
                                555
                            ],
                            [
                                666
                            ]
                        ]
                    },
                    {
                        "if": [{
                                ">=": [{
                                        "var": "t5"
                                    },
                                    {
                                        "var": "t6"
                                    }
                                ]
                            },
                            [
                                777
                            ],
                            [
                                888
                            ]
                        ]
                    }
                ]
            }
        }
    },
    "customerId": 999999999
}

当你说...

for i in data['setting']['rule']['jsonLogic']['merge'][0]['if'][1]:

... idata['setting']['rule']['jsonLogic']['merge'][0]['if'][1]列表的值进行连续复制而不是引用.

所以语句i = str(i).replace(rec1, str(p7[0]))只是将i设置为替换字符串,但您尚未设置data['setting']['rule']['jsonLogic']['merge'][0]['if'][1][0]到替换字符串,这就是你需要做的。 而且您不需要 for 循环,因为您要替换的只有一个元素。 因此,正如@Ynjxsjmh 评论的那样,您所需要的只是:

data['setting']['rule']['jsonLogic']['merge'][0]['if'][1][0] = p7[0]

这是因为您知道rec1'111'str(111)仍然是'111'并且我们知道str(i)的值也是'111' str(p7[0]) == p7[0]) 所以我们将用p7[0]替换整个字符串。 但是您真的希望这是一个字符串还是一个列表,正如您的 JSON 字符串所暗示的那样?

如果列表中可能有多个元素并且您需要替换所有出现的地方,那么一种方法是:

for i in range(len(data['setting']['rule']['jsonLogic']['merge'][0]['if'][1])):
    data['setting']['rule']['jsonLogic']['merge'][0]['if'][1][i] = p7[0]

变量i用于表示索引而不是列表的元素,通常是惯例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM