Saya ingin output JSON saya di Ruby on Rails menjadi "cantik" atau diformat dengan baik.
Saat ini, saya menelepon to_json
dan JSON saya semuanya dalam satu saluran. Kadang-kadang ini bisa sulit untuk melihat apakah ada masalah dalam aliran output JSON.
Apakah ada cara untuk mengkonfigurasi agar JSON saya "cantik" atau diformat dengan baik di Rails?
ruby-on-rails
ruby
json
pretty-print
JP Richardson
sumber
sumber
y my_json
dengan baik akan memformat barang jika Anda ingin perbaikan cepat.undefined method 'y' for main:Object
y
tersedia di konsol rel.Jawaban:
Gunakan
pretty_generate()
fungsi, yang dibangun ke dalam versi JSON yang lebih baru. Sebagai contoh:Yang membuat Anda:
sumber
format.json { render :json => @whatever }
format.json { render :json => JSON.pretty_generate(my_json) }
.Berkat Rack Middleware dan Rails 3 Anda dapat menampilkan JSON cantik untuk setiap permintaan tanpa mengubah pengontrol aplikasi Anda. Saya telah menulis snipet middleware dan saya mendapatkan JSON yang dicetak dengan baik di browser dan
curl
output.Kode di atas harus ditempatkan di
app/middleware/pretty_json_response.rb
proyek Rails Anda. Dan langkah terakhir adalah mendaftarkan middleware diconfig/environments/development.rb
:Saya tidak merekomendasikan untuk menggunakannya
production.rb
. Pemrosesan ulang JSON dapat menurunkan waktu respons dan throughput aplikasi produksi Anda. Akhirnya, logika ekstra seperti tajuk 'X-Pretty-Json: true' dapat diperkenalkan untuk memicu pemformatan untuk permintaan ikal manual sesuai permintaan.(Diuji dengan Rails 3.2.8-5.0.0, Ruby 1.9.3-2.2.0, Linux)
sumber
obj = JSON.parse(response.body.first)
untuk membuatnya bekerja.Rack::Utils.bytesize(pretty_str).to_s
kepretty_str.bytesize.to_s
dan itu berhasil!The
<pre>
tag di HTML, digunakan denganJSON.pretty_generate
, akan membuat JSON cukup dalam pandangan Anda. Saya sangat senang ketika bos terkenal saya menunjukkan ini kepada saya:sumber
Jika Anda menghendaki:
Lalu ... ganti ActionController :: Renderer untuk JSON! Cukup tambahkan kode berikut ke ApplicationController Anda:
sumber
json.respond_to?(:to_h)
atau:to_hash
. (2) pretty_generate dapat tersedak hal-hal yang to_json tidak.Lihat Cetak Luar Biasa . Parsing string JSON ke Ruby Hash, lalu tampilkan dengan
ap
seperti:Dengan yang di atas, Anda akan melihat:
Cetak Keren juga akan menambahkan beberapa warna yang tidak akan ditampilkan oleh Stack Overflow.
sumber
Membuang objek ActiveRecord ke JSON (di konsol Rails):
sumber
pp
alih-alih mencetak ke output standar, gunakanUser.first.as_json.pretty_inspect
. Bekerja dengan baik untuk saya.Menggunakan
<pre>
kode HTML danpretty_generate
trik yang bagus:sumber
Jika Anda menemukan bahwa
pretty_generate
opsi yang dibangun di perpustakaan JSON Ruby tidak cukup "cantik", saya sarankan permata NeatJSON saya sendiri untuk pemformatan Anda.Untuk menggunakannya:
dan kemudian gunakan
dari pada
Seperti Ruby,
pp
ia akan menyimpan objek dan array pada satu baris saat cocok, tetapi bungkus menjadi beberapa sesuai kebutuhan. Sebagai contoh:Ini juga mendukung berbagai opsi pemformatan untuk lebih lanjut menyesuaikan output Anda. Misalnya, berapa banyak spasi sebelum / sesudah titik dua? Sebelum / sesudah koma? Di dalam kurung array dan benda? Apakah Anda ingin menyortir kunci objek Anda? Apakah Anda ingin semua titik dua berbaris?
sumber
Ini adalah solusi middleware yang dimodifikasi dari jawaban yang sangat bagus ini oleh @gertas . Solusi ini tidak spesifik untuk Rails - ini harus bekerja dengan aplikasi Rack apa pun.
Teknik middleware yang digunakan di sini, menggunakan #each, dijelaskan di ASCIIcasts 151: Rack Middleware oleh Eifion Bedford.
Kode ini berlaku di app / middleware / pretty_json_response.rb :
Untuk mengaktifkannya, tambahkan ini ke config / environment / test.rb dan config / environment / development.rb:
Ketika @gertas memperingatkan dalam versinya tentang solusi ini, hindari menggunakannya dalam produksi. Agak lambat.
Diuji dengan Rails 4.1.6.
sumber
sumber
Inilah solusi saya yang saya dapatkan dari posting lain selama pencarian saya sendiri.
Ini memungkinkan Anda untuk mengirim output pp dan jj ke file sesuai kebutuhan.
sumber
Saya telah menggunakan permata CodeRay dan itu bekerja dengan cukup baik. Formatnya termasuk warna dan mengenali banyak format yang berbeda.
Saya telah menggunakannya pada permata yang dapat digunakan untuk debugging rails APIs dan berfungsi dengan baik.
Omong-omong, permata itu bernama 'api_explorer' ( http://www.github.com/toptierlabs/api_explorer )
sumber
Jika Anda ingin menerapkan ini dengan cepat dalam tindakan pengontrol Rails untuk mengirim respons JSON:
sumber
Jika Anda menggunakan RABL, Anda dapat mengonfigurasinya seperti dijelaskan di sini untuk menggunakan JSON.pretty_generate:
Masalah dengan menggunakan JSON.pretty_generate adalah bahwa validator skema JSON tidak akan lagi senang dengan string datetime Anda. Anda dapat memperbaikinya di config / initializers / rabl_config.rb Anda dengan:
sumber
sumber
Saya menggunakan yang berikut ini karena saya menemukan header, status dan output JSON berguna sebagai satu set. Rutinitas panggilan dipecah berdasarkan rekomendasi dari presentasi railscasts di: http://railscasts.com/episodes/151-rack-middleware?autoplay=true
sumber
Varian cetak cantik:
Hasil:
sumber
Contoh paling sederhana, saya bisa memikirkan:
Contoh konsol rel:
sumber