11

私はいくつかの結果を持っています:

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
4

3 に答える 3

6
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}]"
于 2013-08-08T13:22:36.657 に答える
2

「ヘッダー」を 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

それが役に立てば幸い!

于 2013-08-08T13:32:17.203 に答える