- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何将 JSON 文件,其中一些字段值是多行字符串,带有嵌入的换行符(如“\n
”)转换为 YAML,其中带有嵌入换行符的值并且只有那些值是使用文字写入的方 block 符号。
例如给定以下 JSON:
{
"01ea672a": {
"summary": "A short one-line summary",
"description": "first line\nsecond line",
"content": "1st line\n2nd line\n"
}
}
应该生成类似于以下 YAML 的内容(细节可能有所不同):
---
01ea672a:
summary: A short one-line summary
description: |-
first line
second line
content: |
1st line
2nd line
我更喜欢使用脚本语言解决方案,无论是 Python、Perl、Ruby 还是其他语言,或者使用像 Catmandu 这样的命令行转换工具。 .
json2yaml.com在线可以做到这一点,但我不想尝试将它用于 40 MB 的文件。
最佳答案
ruamel.yaml(免责声明:我是那个库的作者),已经可以在不丢失任何信息的情况下往返您的预期输出(包括按键顺序):
import sys
import ruamel.yaml
yaml_str = """---
01ea672a:
summary: A short one-line summary
description: |-
first line
second line
content: |
1st line
2nd line
"""
yaml = ruamel.yaml.YAML()
yaml.explicit_start = True
data = yaml.load(yaml_str)
yaml.dump(data, sys.stdout)
给予:
---
01ea672a:
summary: A short one-line summary
description: |-
first line
second line
content: |
1st line
2nd line
如果你要添加:
print(type(data['01ea672a']['description']), type(data['01ea672a']))
您会看到这些分别是 ruamel.yaml.scalarstring
中的 LiteralStringScalar
。CommentedMap
来自 ruamel.yaml.comments
。后者你可以即时创建通过将类型交给 JSON 加载器,它将保留键顺序,因为它的行为类似于 ordereddict。
前者加载后必须“强制执行”,因为 json.loads
没有“parse_string”选项,可以在加载期间执行此操作。ruamel.yaml
有一个实用函数 walk_tree
可以做到这一点。
有了这些知识,从 JSON 到 YAML 的干净转换就变得微不足道了:
import sys
import ruamel.yaml
import json
json_str = r"""
{
"01ea672a": {
"summary": "A short one-line summary",
"description": "first line\nsecond line",
"content": "1st line\n2nd line\n"
}
}
"""
yaml = ruamel.yaml.YAML()
yaml.explicit_start = True
data = json.loads(json_str, object_pairs_hook=ruamel.yaml.comments.CommentedMap)
ruamel.yaml.scalarstring.walk_tree(data)
yaml.dump(data, sys.stdout)
再次准确给出您期望的输出。
关于JSON 到 YAML : convert fields with embedded newlines "\n" to literal block "|",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47182204/
这是我在试验 JS 时的最新发现: (function() { return this; }).call('string literal'); // => [String: 'string liter
在 C 中有没有一种方法可以使用宏从字 rune 字创建字符串文字? 比如我有 'a' 我想创建字符串文字 "a" 澄清问题: #define A 'a' write(fd, "x=" CHAR2ST
令我困扰的是为什么术语“literal”被用来指代NSString和NSArray等类的实例。我只看到了用于引用 NSString 的术语,并且天真地认为它与“字面上”是一个字符串(位于引号之间)有关
我有以下使用 smarty 模板引擎的代码 在 php 文件中: $smarty->assign('SITE_URL', 'http://localhost/mis/'); 在 tpl 文件中:
我正在使用 regex101 tool 制作正则表达式并在解释字段中阅读 [.] - 文字字符 .[\.] - 匹配字符 .字面上地 我在“字面字符”和“字面字符”之间迷失了方向。 这两者有什么区别?
这个问题在这里已经有了答案: Single quotes vs. double quotes in C or C++ (15 个答案) 关闭 4 年前。 我正在阅读一本讨论“字 rune 字”与“字
浮点文字 float x = 3.2f; 的直接赋值和隐式转换为 float 的 double 之间的位表示是否存在差异 float x2 = 3.2;? 即是 #define EQUAL(FLOAT
这个极其简单的 Rust 程序: fn main() { let c = "hello"; println!(c); } 抛出以下编译时错误: error: expected a li
这个极其简单的 Rust 程序: fn main() { let c = "hello"; println!(c); } 抛出以下编译时错误: error: expected a li
是否有单行,类型 mapfilter ... es5+ higherfunction 或 ...?希望解决方案描述如何以及为什么和引用。如果有人知道为什么曾经不起作用。 timeTableKeys:是
我有包含这些声明的代码: class IRealNetDll; extern "C"__declspec(dllexport) IRealNetDll * CreateRealInstance(int
我有一个用于我们的一些服务的 SOAP 服务器 API,其中一位客户说他们不会与不提供至少 WS-I 基本配置文件合规性绑定(bind)的服务集成。 那么,问题是任何版本的 Delphi 都支持 Do
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
在代码中隐藏文字值的主要现有方法是什么,以便仅使用 hexdumper 或反编译器不容易跟踪它们? 例如,而不是编码: static final int MY_VALUE = 100; 我们可
我正在尝试使用文字来匹配 Empty Guid,但我不知道这里发生了什么: let [] EmptyGuid = System.Guid () let someFunction () = System
我正在尝试搜索 [Panels] like "*,*" 在工作表中,不幸的是,它没有准确检索该字符串,而是检索如下内容: [Panels] like "*blah,*" [Panels] like "
我看不出自然语言编程和文学编程之间的区别。如果有人解释,我将不胜感激。 最佳答案 Natural language programming是一种以近似于人类书写或说话的语言的形式向计算机表达指令的
我想从字符串数组中初始化一个 pydantic 文字 from typing import Literal from pydantic import BaseModel CLASS_NAME_VALU
我正在尝试在代码后面编写我的js代码。我定义了一个名为“contentPie”的文字,然后将 javascript 代码放入其文本中。但这不起作用。 contentPie.Text = "window
我有一个简单的数据集,可以使用如下行进行解析: R1 (a/30) to R2 (b/30), metric 30 我需要从上面得到的唯一数据如下: R1, a, 30, R2, 192.168.0.
我是一名优秀的程序员,十分优秀!