【问题标题】:YAML File From JSON来自 JSON 的 YAML 文件
【发布时间】:2019-03-26 16:48:46
【问题描述】:

我正在尝试从 json 文件创建一个 yaml 文件,该文件将用于 cuttle 速率限制,并且看起来像这样 (https://github.com/mrkschan/cuttle/blob/master/cuttle.yml)。这是我必须转换 json 文件的代码。 (node-yaml:https://www.npmjs.com/package/node-yaml)

const yaml = require('node-yaml');
const test = require('./test.json');

let converted = yaml.dump(test);
console.log(converted);

这是 test.json 文件。

{
"zones": 
    [ 
        { 
            "host": "*", 
            "shared": true, 
            "control": "rps", 
            "rate": 2 
        }, 
        { 
            "host": "github.com", 
            "shared": false, 
            "control": "rpm", 
            "rate": 10
        }
    ] 
}

我得到的输出是这样的。

zones:
  - host: '*'
    shared: true
    control: rps
    rate: 2
  - host: github.com
    shared: false
    control: rpm
    rate: 10

它非常接近我想要输出的内容,除了 github.com 不是“github.com”这一事实。如果有人知道如何解决这个问题,请告诉我!

【问题讨论】:

  • github.com is not "github.com" 是什么意思?
  • 一个是双引号,一个不是

标签: javascript json yaml cuttle


【解决方案1】:

来自yaml_formatYAML 中的字符串可以用单引号和双引号括起来。在某些情况下,它们也可以不加引号

因此,yaml 输出中的github.com 字符串值被正确地引用,并且yaml 输出中的* 字符串值被正确地引用。

如果您期望正式正确的 yaml 格式,您就完成了。
如果你期望一些不同的格式,你应该正式定义它。

【讨论】:

  • IIRC 在 Symfony 中解析字符串存在实现问题。无论如何,Symfony 实现了 YAML 规范的一个子集,所以引用它的文档并不能帮助你的答案更有价值,例如引用官方 YAML 规范。除此之外,node-yaml 没有 Symfony 的 YAML 那样的子集限制:它支持完整的 YAML 1.2 规范
【解决方案2】:

在 YAML 中 github.com 不需要引号。无论有没有它,它都代表相同的标量值。

但由于 YAML 是 JSON 的超集,您的 test.json 文件已经完美的 YAML,并且绝对不需要解析它(使用 JSON 或 YAML 库)然后转储到YAML。您的程序需要做的唯一事情是将test.json 复制(或重命名)为test.yaml,然后您就完成了。

附带说明:您的链接指向cuttle.yml,没有说明他们必须使用.yml 扩展名有什么限制。从 2006 年 9 月起,official FAQ on yaml.org 上发布的 YAML 文件的推荐扩展名为 .yaml

【讨论】:

  • 所以你的意思是,如果我将文件名更改为具有 .yaml 扩展名,它将可以使用 cuttle 进行配置并且工作正常?
  • 因为 node-yaml 是一个 YAML 1.2 解析器,而 YAML 1.2 是一个超集:是的。请参阅 YAML 1.2 规范中的 Relation to YAML
  • 对不起,我还是有点糊涂。如果我只是需要重命名,我根本不会使用 node-yaml。那么在这种情况下,它将无法使用 cuttle 进行配置?
  • 是的,你根本不需要 node-yaml。任何使用已更新到 2009 年 YAML 1.2 规范的库的程序都可以读取该文件。我不明白你最后一句话中的“它”指的是什么,以及为什么在非疑问句之后有一个问号。您感到困惑并不意味着 JSON 不是 YAML 子集。
  • 对不起,我想这是我说话的方式,可能有点令人困惑。本质上,我是在询问 json 文件是否可以与 cuttle 一起使用,以替代 yaml。
猜你喜欢
  • 2014-10-11
  • 2018-07-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 2016-11-05
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
相关资源
最近更新 更多