【问题标题】:How to write a list of string as double quotes, so that json can load?如何将字符串列表写为双引号,以便 json 可以加载?
【发布时间】:2018-12-21 10:04:32
【问题描述】:

考虑以下代码,其中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"]

【问题讨论】:

  • str(l)代替json.dumps(l)
  • @L3viathan 对 dict 有用吗?
  • 是的,它适用于您可以使用json.loads 阅读的所有内容:数字、None、字符串、布尔值、字典和列表。

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


【解决方案1】:

正如@L3viathan 已经提到的,纯粹的技术答案是“使用 json.dumps() 而不是 str()”(是的,它也适用于 dicts)。

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

[Basic]
simple_list = a,b

并在读取配置时将其解析为

values = config.get('Basic', 'simple_list')).split(",")

wrt/“存储字典”,ini 文件已经是(某种)字典,因为它基于键:值对。它被限制在两个级别(部分和键),但这里又是设计使然 - 它是为最终用户设计的格式,而不是为程序员设计的。

现在,如果 ini 格式不适合您的需求,没有什么可以阻止您仅使用 json(或 yaml)文件来代替整个配置

【讨论】:

  • 我知道列表的诀窍,但是为每个条目拆分一个大字典很麻烦。我宁愿使用像 entry 一样的 dict 并用 json 加载它
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 2021-12-16
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多