我正在加载 YAML 文件(特别是 CloudFormation 模板),其中可能包含自定义标签(例如 !Ref
),我希望将其视为普通字符串,即 YAML.safe_load('Foo: !Bar baz')
将导致 {"Foo"=>"!Bar baz"}
或类似的内容。这是因为我想在将模板转储回去之前遍历并操作该模板。我不想 add_tag
https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/intrinsic-function-reference.html 下的所有内容。我目前使用的是 Psych 和 Ruby 2.0,但这两者都不是严格要求。
更新 1:我的意思是基于 2.0 以上的 Ruby 版本的答案是可以的。
更新 2:我在本例中添加了 CloudFormation 标记,因为注册一堆 !X
-> Fn::X
转换可能是最不糟糕的解决方案,目前我不需要一般的 Ruby 问题。
最佳答案
好吧,假设您在解析 YAML 后得到了 {"Foo"=>"!Bar baz"}
。
您用它做了一些事情,然后想将其转换回 YAML?
{"Foo"=> "!Bar baz"}.to_yaml
会导致 Foo: "!Bar baz"
——这不是你开始的内容(现在它是一个字符串,不评估标签)。
采用解析 YAML 的方式并不简单,也许应该做其他事情。
关于ruby - 加载 YAML 而不扩展标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56085647/