gpt4 book ai didi

ruby - 如何使用文字标量样式在 YAML 中转储字符串?

转载 作者:数据小太阳 更新时间:2023-10-29 07:13:49 25 4
gpt4 key购买 nike

我有一大串格式化数据(例如 JSON),我想使用 Psych in ruby​​ 同时保留格式转储到 YAML。

基本上,我希望 JSON 使用 literal style 出现在 YAML 中:

---
json: |
{
"page": 1,
"results": [
"item", "another"
],
"total_pages": 0
}

但是,当我使用 YAML.dump 时,它不使用文字样式。我得到这样的东西:

---
json: ! "{\n \"page\": 1,\n \"results\": [\n \"item\", \"another\"\n ],\n \"total_pages\":
0\n}\n"

我如何告诉 Psych 以想要的样式转储标量?


解决方案:

非常感谢 Aaron Patterson 提供的解决方案,我将在此处展开​​:https://gist.github.com/2023978

虽然有点冗长,但该要点是一种在 ruby​​ 中标记某些字符串以在 YAML 中使用文字样式输出的工作方式。

最佳答案

require 'psych'

# Construct an AST
visitor = Psych::Visitors::YAMLTree.new({})
visitor << DATA.read
ast = visitor.tree

# Find all scalars and modify their formatting
ast.grep(Psych::Nodes::Scalar).each do |node|
node.plain = false
node.quoted = true
node.style = Psych::Nodes::Scalar::LITERAL
end

begin
# Call the `yaml` method on the ast to convert to yaml
puts ast.yaml
rescue
# The `yaml` method was introduced in later versions, so fall back to
# constructing a visitor
Psych::Visitors::Emitter.new($stdout).accept ast
end

__END__
{
"page": 1,
"results": [
"item", "another"
],
"total_pages": 0
}

关于ruby - 如何使用文字标量样式在 YAML 中转储字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com