在Ruby中读取多个连接的json对象

时间:2017-10-17 15:41:01

标签: ruby-on-rails json ruby

我有一个文件,其中包含多个未用逗号分隔的JSON对象:

{
  "field" : "value",
  "another_field": "another_value"
} // no comma
{ 
  "field" : "value"
}

每个独立的对象都是有效的json对象。

有没有办法可以轻松处理这个文件?

  1. 我知道这不是一个有效的json,但遗憾的是这个文件是由第三方工具生成的。我没有选择改变输出的方式。
  2. 我无法在运行之前打开文本编辑器和智能插入逗号/方括号,因为这是一个自动化过程(我也真的不想编写打开文件并操作它的代码)。 / LI>

    在.NET中有一个具有以下功能的库: https://stackoverflow.com/a/29480032/2970729 https://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonReader_SupportMultipleContent.htm

    Ruby中有什么相同的东西吗?

2 个答案:

答案 0 :(得分:1)

只要您的文件很简单,您可能希望执行以下操作:

# content = File.read(filename)
content =<<-EOF
  {
    "field" : "value",
    "another_field": "another_value"
  } // no comma
  { 
    "field" : "value"
  }
EOF

require 'json'

JSON.parse("[#{content.gsub(/\}.*?\{/m, '},{')}]")
#=> [{"field"=>"value", "another_field"=>"another_value"}, {"field"=>"value"}]

答案 1 :(得分:0)

yajl-ruby gem可在Ruby中处理串联的JSON。解析器可以从字符串或IO中读取。每个完整的对象都产生一个块。

require 'yajl'

File.open 'file.json' do |f|
  Yajl.load f do |object|
    # do something with object
  end
end

有关其他选项(缓冲区大小,符号键等),请参见documentation