如何将字符串列表写为双引号,以便可以加载json?

时间:2018-12-21 10:04:33

标签: json python-3.x string list config

考虑以下代码,由于操作后单引号变成了双引号,因此无法回载json,如何将文件写为双引号列表,以便json可以回载?

import configparser
import json

config = configparser.ConfigParser()
config.read("config.ini")
l = json.loads(config.get('Basic', 'simple_list'))

new_config = configparser.ConfigParser()
new_config.add_section("Basic")
new_config.set('Basic', 'simple_list', str(l))

with open("config1.ini", 'w') as f:
    new_config.write(f)

config = configparser.ConfigParser()
config.read("config1.ini")
l = json.loads(config.get('Basic', 'simple_list'))

settings.ini文件内容如下:

[Basic]
simple_list = ["a", "b"]

1 个答案:

答案 0 :(得分:0)

@ L3viathan已经提到过,纯粹的技术答案是“使用json.dumps()代替str()”(是的,它也适用于字典)。

但是:将json存储在ini文件中是非常的坏主意。 “ ini”是一种单独的文件格式(即使没有严格指定为json或yaml),并且它被设计为可以使用任何文本编辑器进行用户编辑。 FWIW,在ini文件中存储“列表”的简单规范方法就是将它们存储为逗号分隔的值,即:

[Basic]
simple_list = a,b

并在以

读取配置时将其解析回去
values = config.get('Basic', 'simple_list')).split(",")

wrt /“ storing dicts”,一个ini文件已经是(某种)dict,因为它基于key:value对。它被限制为两个级别(部分和键),但这又是设计使然–它是一种为最终用户而不是为程序员设计的格式。

现在,如果ini格式不符合您的需求,那么什么都不会阻止您仅使用json(或yaml)文件代替整个配置