假设我们有一个数据库,其中有一个包含配置的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]]
但是参数的数量可以变化,我还想把它写回配置对象,把它转换回字符串,然后写进数据库。
我知道这不是一件好事,但我很感兴趣怎么能这样做
2条答案
按热度按时间w7t8yxp51#
假设你有一个嵌套的json对象,如下所示:
您有一个“路径”列表,如下所示:
您可以像这样遍历路径:
data
将作为path
中最后一项的值结束,在本例中为subdict{'foo': 'bar'}
kokeuurv2#
您可以使用
functools.reduce
执行以下操作:第一个
结果:
附言
如果
data
的数据类型是其他类型,则可以使用operator.itemgetter