2012-01-12 33 views
122

Tôi có một băm lớn với mảng lồng nhau và băm. Tôi chỉ muốn in nó ra để nó có thể đọc được cho người dùng.Cách tốt nhất để in băm đẹp

Tôi muốn nó giống như to_yaml - điều đó khá dễ đọc - nhưng vẫn quá công nghệ.

Cuối cùng, người dùng cuối cần phải đọc các khối dữ liệu này để chúng cần được định dạng rõ ràng.

Mọi đề xuất?

+0

thể trùng lặp của [Ruby: Làm thế nào để làm cho cấu trúc in IRB cho Mảng và Hashes] (http://stackoverflow.com/questions/703049/ruby-how-to-make-irb-print -kết cấu-cho-mảng-và-băm) –

+0

tiện ích trực tuyến http://jsonviewer.stack.hu. Tuy nhiên nó không hoạt động đúng cho cú pháp băm tên lửa. –

Trả lời

193
require 'pp' 
pp my_hash 

Sử dụng pp nếu bạn cần một giải pháp tích hợp và chỉ muốn ngắt dòng hợp lý.

Sử dụng awesome_print nếu bạn có thể cài đặt đá quý. (Tùy thuộc vào người dùng của bạn, bạn có thể muốn sử dụng tùy chọn index:false để tắt hiển thị các chỉ số mảng.)

+75

Lưu ý tới Roobys (Ruby noobs) như tôi : bạn cần phải 'yêu cầu 'pp'' để gọi phương thức' pp' –

-3

Trong Rails, mảng và băm trong Ruby có sẵn hàm to_json. Tôi sẽ sử dụng JSON chỉ vì nó rất dễ đọc trong trình duyệt web, ví dụ: Google Chrome. Điều đó đang được nói nếu bạn đang lo lắng về nó trông quá "công nghệ tìm kiếm", bạn có lẽ nên viết chức năng của riêng bạn thay thế các dấu ngoặc nhọn và dấu ngoặc vuông trong băm và mảng của bạn với không gian trắng và các ký tự khác.

Tra cứu hàm gsub để có cách thực hiện tốt. Tiếp tục chơi xung quanh với các nhân vật khác nhau và số lượng khoảng trắng khác nhau cho đến khi bạn tìm thấy nội dung hấp dẫn. http://ruby-doc.org/core-1.9.3/String.html#method-i-gsub

+7

Mảng và băm không có phương thức to_json tích hợp, chúng được thêm bởi ActiveSupport từ Rails. –

+0

Thậm chí còn tồi tệ hơn bình thường irb/pry: '{" programming_language ": {" ruby ​​": {}," python ": {}}}' –

+0

OP không loại trừ Rails –

58

Nếu bạn có JSON, tôi khuyên bạn nên JSON.pretty_generate(hash) vì nó là đơn giản hơn awesome_print, trông tuyệt vời trong một thẻ pre, và cho phép để sao chép dễ dàng từ trang web. (Xem thêm: How can I "pretty" format my JSON output in Ruby on Rails?)

+0

Câu trả lời này sẽ được hưởng lợi từ ví dụ thực tế –

+0

@TravisBear Có ví dụ đầu ra nếu bạn nhấp vào liên kết "xem thêm" trong câu trả lời của tôi. Tôi đề nghị câu trả lời này đặc biệt: http://stackoverflow.com/a/1823885/109618 –

+3

Nó sẽ là 'đặt JSON.pretty_generate (băm) ' – joeloui

4

Sử dụng câu trả lời ở trên nếu bạn đang in cho người dùng.

Nếu bạn chỉ muốn in nó cho chính mình trong bảng điều khiển, tôi đề nghị sử dụng đá quý pry thay vì irb. Ngoài in ấn đẹp, nâng lên có rất nhiều tính năng khác nữa (kiểm tra railscast bên dưới)

gem install nâng lên

Và kiểm tra railscast này:

http://railscasts.com/episodes/280-pry-with-rails

1

Sử dụng Pry bạn chỉ cần thêm mã sau vào ~ /.pryrc:

require "awesome_print" 
AwesomePrint.pry! 
16

Một giải pháp mà làm việc tốt hơn cho tôi hơn pp hoặc awesome_print:

require 'pry' # must install the gem... but you ALWAYS want pry installed anyways 
Pry::ColorPrinter.pp(obj) 
+2

Lưu ý rằng 'Pry :: ColorPrinter.pp (obj)' ghi ra tiêu chuẩn nhưng có thể lấy thêm thông số, bao gồm cả đích. Giống như 'Pry :: ColorPrinter.pp (obj, a_logger)' –

1

Trong tất cả các đá quý tôi đã cố gắng, show_data đá quý làm việc tốt nhất cho tôi, bây giờ tôi sử dụng nó rộng rãi để đăng nhập băm params trong Rails khá nhiều thời gian

11

Nếu bạn không có bất kỳ hành động đá quý lạ mắt nào, nhưng có JSON, dòng CLI này sẽ hoạt động trên một băm:

puts JSON.pretty_generate(my_hash).gsub(":", " =>")

#=> 
{ 
    :key1 => "value1", 

    :key2 => "value2", 

    :key3 => "value3" 
} 
+5

Bị bỏ qua vì điều này sẽ làm hỏng bất kỳ khóa và giá trị nào chứa ":" – thomax

+0

Điều này cũng không đối phó với null (JSON) so với nil (Ruby). – Rennex

Các vấn đề liên quan