【问题标题】:Ruby on Rails write Hash to file without : and => valuesRuby on Rails 在没有 : 和 => 值的情况下将 Hash 写入文件
【发布时间】:2021-07-09 04:24:20
【问题描述】:

我在 Ruby on Rails 应用程序中有一个哈希,需要以以下格式写入文件 -

{emp_id:15, emp_name:"Test", emp_sal:1800, emp_currency:"USD"}

但我可以将其打印在以下格式的文件中 -

{:emp_id=>15, :emp_name=>"Test", :emp_sal=>1800, :emp_currency=>"USD"}

有没有办法在将哈希写入文件时删除符号的: 并用: 替换=>

谢谢!

【问题讨论】:

  • 您可以在键周围加上引号吗? {"emp_id":15, "emp_name":"Test"...}?如果是这样,那是一个标准的 JSON 文件。如果没有引号,您必须手动完成(仍然不难,但使用标准格式更好)。
  • 抱歉,要求不允许在键周围加上引号。
  • 不幸。所有键都是原始的,还是可以是哈希/数组?
  • 对我来说这听起来像是xy problem。你能解释一下为什么你需要在文件中使用这种独特格式的数据吗? IMO 使用更常见和标准化的数据格式(如 JSON 或 YAML)将具有许多优势。一个非常明显的优势是您现在需要一种特殊的方法来将数据写入文件,但您以后还需要一种特殊的方法来读取和解析该数据。

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

正如我在 cmets 中所说,您必须手动执行此操作。使用hash.map 获取键/值对并相应地格式化它们,使用逗号连接,然后在结果周围添加花括号。我使用#to_json 作为快捷方式,可以将引号添加到字符串而不是整数。

hash = {emp_id:15, emp_name:"Test", emp_sal:1800, emp_currency:"USD"}

require 'json'
result = '{' + hash.map { |k, v| "#{k}:#{v.to_json}" }.join(', ') + '}'

puts result
# => {emp_id:15, emp_name:"Test", emp_sal:1800, emp_currency:"USD"}

请注意,这仅适用于单个级别。如果有嵌套,则需要递归函数。

【讨论】:

  • 酷。是否可以删除字符串的引号?例如:{emp_id:15, emp_name:Test, emp_sal:1800, emp_currency:USD}
  • 然后使用v insted of v.to_json
猜你喜欢
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2022-01-12
  • 2012-04-06
  • 2011-02-02
  • 1970-01-01
相关资源
最近更新 更多