将 Ruby 数组解析为 JSON

12
我有一些结果:
puts result

这个输出看起来像这样:

Allowed
20863963
1554906
Denied
3607325
0
Quarantined
156240 
0

调试

p results

输出

[["Allowed", 20863963, 1554906], ["Denied", 3607325, 0], ["Quarantined", 156194, 0]]

这些头部信息包括:

status,hits,page_views 

我需要将这个转换成json格式。如果结果是标准的csv格式,那么很简单,但如果结果格式像上面那样,应该如何处理呢?

预期输出应该类似于这样:

[{"status":"Allowed","hits":"20863963","page_views":"1554906"},{"status":"Denied","hits":"3607325","page_views":"0"},{"status":"Quarantined","hits":"156240","page_views":"0"}]

解决方案

a = result.map{|s| {status: s[0], hits: s[1].to_i, page_views: s[2].to_i} }
puts a.to_json

2
result 是什么类型的对象?是数组吗?你能否提供你期望得到的输出结果? - toro2k
已添加到原帖。谢谢。 - pablo808
1
你写了什么代码来解决这个问题?这是一件非常容易的事情。 - the Tin Man
3个回答

18

看一下 to_json 方法。

require 'json'
# => true 
h = {a: 1, b: 2,c: 3}
# => {a: 1, b: 2,c: 3}
h.to_json
# => "{\"a\":1,\"b\":2,\"c\":3}" 

7
output = "Allowed
20863963
1554906
Denied
3607325
0
Quarantined
156240 
0"

a = output.split("\n").each_slice(3).map{|s| {status: s[0], hits: s[1].to_i, page_views: s[2].to_i} } # => [{:status=>"Allowed", :hits=>20863963, :page_views=>1554906}, {:status=>"Denied", :hits=>3607325, :page_views=>0}, {:status=>"Quarantined", :hits=>156240, :page_views=>0}]
a.to_json # => => "[{\"status\":\"Allowed\",\"hits\":20863963,\"page_views\":1554906},{\"status\":\"Denied\",\"hits\":3607325,\"page_views\":0},{\"status\":\"Quarantined\",\"hits\":156240,\"page_views\":0}]"

我需要更新输出,通过查看你的答案解决了它。 - pablo808

2
你可以将你的“headers”分配到attr_accessor中,然后告诉JSON解析该符号。以下是一个示例:
class Document
  attr_accessor :content

  def content
    metadata[:content] || metadata['content']
  end

  def self.parse_contents
    txt = File.read(path, {mode: 'r:bom|utf-8'})

    page = Document.new
    page.metadata = JSON.parse(txt)
    page.content = page.metadata['content']

    return page
  end
end

希望能对您有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接