我有一些结果:
puts result
Run Code Online (Sandbox Code Playgroud)
看起来像这样的输出:
Allowed
20863963
1554906
Denied
3607325
0
Quarantined
156240
0
Run Code Online (Sandbox Code Playgroud)
调试
p results
Run Code Online (Sandbox Code Playgroud)
产量
[["Allowed", 20863963, 1554906], ["Denied", 3607325, 0], ["Quarantined", 156194, 0]]
Run Code Online (Sandbox Code Playgroud)
标题是:
status,hits,page_views
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为json.如果结果是标准的csv格式,那么它将是直截了当的,但如果结果格式如上所示,如何处理它?
预期输出与此类似:
[{"status":"Allowed","hits":"20863963","page_views":"1554906"},{"status":"Denied","hits":"3607325","page_views":"0"},{"status":"Quarantined","hits":"156240","page_views":"0"}]
Run Code Online (Sandbox Code Playgroud)
解
a = result.map{|s| {status: s[0], hits: s[1].to_i, page_views: s[2].to_i} }
puts a.to_json
Run Code Online (Sandbox Code Playgroud)
bma*_*ets 15
看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}"
Run Code Online (Sandbox Code Playgroud)
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}]"
Run Code Online (Sandbox Code Playgroud)