django 如何只更新一个json的一部分,它存储在一个有“json路径”列表的数据库中?

6za6bjd0  于 2022-12-14  发布在  Go
关注(0)|答案(2)|浏览(167)

假设我们有一个数据库,其中有一个包含配置的json字符串,在应用程序中,我们只想更新一个特定的值,然后将json字符串写回数据库。
HTTP请求提供了一个“jsonPath”,它反映了json文件中导航到我们要更新的对象的路径。
路径的一个示例可以是 ['input',' keyboard','language'],我们要设置的值是*'en'*
在这里,我们从数据库中加载到目前为止工作正常的配置:

if request.data['jsonPath']: 
    config =  json.loads(models.Config.objects.get(name__startswith='general').value

那么config现在只是一个普通的对象,我可以用点标记法访问它,比如config.input.keyboard.language,它包含json语法中相应的部分。
我可以使用以下语法读出字段的值:

config[request.data['jsonPath'][0]][request.data['jsonPath'][1]][request.data['jsonPath'[3]]

但是参数的数量可以变化,我还想把它写回配置对象,把它转换回字符串,然后写进数据库。
我知道这不是一件好事,但我很感兴趣怎么能这样做

w7t8yxp5

w7t8yxp51#

假设你有一个嵌套的json对象,如下所示:

mydict = {
    'key1': {
        'key2': {
            'key3': {
                'foo': 'bar'
            },
        },
    },
}

您有一个“路径”列表,如下所示:

path = ['key1', 'key2', 'key3']

您可以像这样遍历路径:

data = mydict
for key in path:
    data = data[key]

data将作为path中最后一项的值结束,在本例中为subdict {'foo': 'bar'}

kokeuurv

kokeuurv2#

您可以使用functools.reduce执行以下操作:
第一个
结果:

{'key1': {'key2': {'key3': {'foo': 'baz'}}}}

附言

如果data的数据类型是其他类型,则可以使用operator.itemgetter

相关问题