【问题标题】:How to create a YAML structure with an array of hashes from a ruby array?如何使用来自 ruby​​ 数组的哈希数组创建 YAML 结构?
【发布时间】:2015-02-20 18:47:19
【问题描述】:

我的任务是从 ruby​​ 数据结构中表达如下的 YAML 结构:

- a
- b
- a
- include:
    name: test 
- include:
    name: test2

我尝试了以下方法:

require "json"
#=> true
require "yaml"
#=> true
array = ["a","b","a","include" => {"name"=>"test"}]
#=> ["a", "b", "a", {"include"=>{"name"=>"test"}}]
puts JSON.parse(array.to_json).to_yaml
#---
#- a
#- b
#- a
#- include:
#    name: test
#=> nil

所以这看起来我在正确的轨道上。但是当我简单地将另一个哈希条目添加到数组中时,我得到以下信息:

array = ["a","b","a","include" => {"name"=>"test"}, "include" => {"name"=>"test2"}]
#(irb):23: warning: duplicated key at line 23 ignored: "include"
#=> ["a", "b", "a", {"include"=>{"name"=>"test2"}}]
puts JSON.parse(array.to_json).to_yaml
#---
#- a
#- b
#- a
#- include:
#    name: test2
#=> nil

这让我很困惑。数组的条目不应该相互独立吗?为什么 Ruby 将最后两个条目合并为一个哈希?如果可能的话,我该怎么做才能用 ruby​​ 数据结构创建给定的 YAML 结构(如果这是一个愚蠢的问题,我很抱歉,但我是 Ruby 初学者)?

【问题讨论】:

  • 你有 duplicate 键,这是不允许的。你需要有唯一的名字。你有includetwice。跨度>
  • 我看到 ruby​​ 认为我有重复的键。但我认为这是错误的。两个“include”只是数组中的两个条目,与两个“a”相同。但是 ruby​​ 将它们视为属于一个哈希值。这真是令人困惑。
  • 哦!好吧,那我可能误会了。 :)
  • 为什么人们不赞成这样的问题?
  • 我不知道.. 我不知道.. 但不是问题,有时好的答案也会受到一些无意义的人的攻击。别管他们!

标签: ruby arrays hashmap yaml


【解决方案1】:

尝试在散列周围加上额外的大括号 - 否则 Ruby 认为它只是数组末尾的一个散列。

["a", "b", "a", {"include" => {"name"=>"test"}}, {"include" => {"name"=>"test2"}}].to_yaml

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 2016-02-27
    • 2018-08-24
    • 2013-07-14
    • 2014-05-11
    相关资源
    最近更新 更多