我正在使用PyYAML library将 json 转换为 yaml。但是引号在不应该的情况下从字符串值中删除了。它们只能从键中删除。
我已将 default_flow_style 选项与 yaml 转储功能一起使用,如下所示:
import yaml
x = {'name':'Alice','location':'New York', 'profession':'coder'}
yaml.dump(x, default_flow_style=False)
实际结果是:
'地点:纽约\n姓名:Alice\n职业:编码员\n'
当期望的结果是:
“地点:'纽约'\n姓名:'Alice'\n职业:'编码员'\n”
最佳答案
您正在使用的 PyYAML 库并不容易为您提供这些
一种控制。如果原始报价是多余的,它会删除
使用它加载然后转储 YAML(版本 1.1)。如果你指定
default_style='"'
每个字符串都会被引用,包括键。
ruamel.yaml
(免责声明:我是该包的作者)可以做到这一点
一种往返,同时允许您保留您的特定和/或
多余的引号。它这样做的机制为您提供了类型
您可以开箱即用。
感谢 David Fraser 您还可以轻松地拥有不带引号的映射键,而其余所有键都用双引号括起来:
import sys
import ruamel.yaml
def non_quoted_key(self, data):
if isinstance(data, ruamel.yaml.compat.string_types):
data = ruamel.yaml.scalarstring.PlainScalarString(data)
return self.represent_data(data)
x = {'name':'Alice', 'location':'New York', 'profession':'coder'}
yaml = ruamel.yaml.YAML()
yaml.default_flow_style = False
yaml.default_style = '"'
yaml.Representer.represent_key = non_quoted_key
yaml.dump(x, sys.stdout)
给出:
name: "Alice"
location: "New York"
profession: "coder"
关于python - Python 中的 JSON 到 YAML : How to get correct string manipulation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55808945/