python - Python 中的 JSON 到 YAML : How to get correct string manipulation?

标签 python json yaml

我正在使用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/

相关文章:

amazon-web-services - Cloudformation 堆栈模板条件

python - 如何使用 geopanda 或 shapely 在同一地理数据框中找到最近的点

python - 使用Python进行CSV数据分析

python - 在 tweepy 中回复推文

java - 立即将 Spark 中的 Json 字符串索引到 Elasticsearch

yaml - 使用嵌套键在 puppet list 中获取 hiera 值

python - 从当前时间获取小时

json - 如何禁用 ListView 中特定项目的单击

JavaScript 选择类似数组的对象?

python - 多行中的 PyYAML 变量