2013-08-08 9 views
7

Tôi có một số kết quả:Phân tích một mảng Ruby để JSON

puts result 

Đó trông giống như đầu ra này:

Allowed 
20863963 
1554906 
Denied 
3607325 
0 
Quarantined 
156240 
0 

gỡ lỗi

p results 

đầu ra

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

Các tiêu đề là:

status,hits,page_views 

Tôi cần chuyển đổi thành json. Nếu kết quả ở định dạng csv chuẩn thì nó sẽ thẳng về phía trước nhưng làm cách nào để tiếp cận nó nếu định dạng kết quả trông như trên?

mong đợi một cái gì đó đầu ra tương tự như sau:

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

Giải pháp

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

Loại đối tượng 'kết quả' là gì? Một mảng? Bạn có thể xin vui lòng đăng đầu ra mà bạn mong đợi để có được? – toro2k

+0

được thêm vào bài đăng gốc. thx – pablo808

+0

Bạn viết mã nào để giải quyết vấn đề này? Đó là một điều thực sự dễ dàng để làm. –

Trả lời

4
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}]" 
+0

Tôi phải cập nhật đầu ra và giải quyết nó bằng cách xem câu trả lời của bạn. – pablo808

2

Bạn chỉ định "tiêu đề" của bạn vào attr_accessor và sau đó nói với JSON để phân tích biểu tượng đó. Dưới đây là ví dụ:

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 

Hy vọng điều đó sẽ hữu ích!

10

Nhìn vào phương pháp 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}"