Python中JSON到YAML:如何获得正确的字符串操作?

Python中JSON到YAML:如何获得正确的字符串操作?,python,json,yaml,Python,Json,Yaml,我正在使用将json转换为yaml。但是,如果字符串值不应该使用引号,则会将其删除。只能从钥匙上拆下它们 我已将默认的_flow_样式选项与yaml转储函数一起使用,如下所示: 导入yaml x={'name':'Alice','location':'newyork','profession':'coder'} yaml.dump(x,默认流样式=False) 实际结果是: '地点:纽约\n姓名:Alice\n通话时间:coder\n' 当所需结果为: “地点:'New York'\n名称:'

我正在使用将json转换为yaml。但是,如果字符串值不应该使用引号,则会将其删除。只能从钥匙上拆下它们

我已将默认的_flow_样式选项与yaml转储函数一起使用,如下所示:

导入yaml
x={'name':'Alice','location':'newyork','profession':'coder'}
yaml.dump(x,默认流样式=False)
实际结果是:
'地点:纽约\n姓名:Alice\n通话时间:coder\n'

当所需结果为:

“地点:'New York'\n名称:'Alice'\n密码:'coder'\n”
您正在使用的PyYAML库不会轻易为您提供这些信息 一种控制。如果你认为是多余的话,它会删除原来的报价 加载YAML(1.1版),然后将其转储。如果你指定
default\u style='”
每个字符串都被引用,包括键

ruamel.yaml
(免责声明:我是该软件包的作者)可以做到这一点 一种往返,同时允许您保留特定和/或 多余的引号。其机制为您提供了类型 你可以开箱即用

多亏了 您还可以轻松地使用非引号的映射键,而其余所有键都是双引号的:

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"

从YAML的角度来看,它们是等价的。引号大部分是可选的。从这个意义上说,整个转换是可选的,因为YAML是JSON的超集。有趣的是,我不知道它们被认为是等价的,YAML是JSON的超集。@LeoE YAML从版本1.2 rele开始就一直是JSON的超集ased于2009年发布,但您正在使用的(过时的)PyYAML库只支持YAML 1.1。谢谢@Anthon…这就是我可能感到困惑的地方。我不知道为什么它被认为是python的标准YAML库,尽管它已经过时。感谢您的帖子!它解决了这个问题(在您确实需要引号的情况下)。如果您是包的作者就可以了。事实上,您的包应该是标准的python yaml库,而不是PyYAML。