Saya mencoba menemukan cara untuk pretty print
struktur data JavaScript dalam bentuk yang dapat dibaca manusia untuk debugging.
Saya memiliki struktur data yang agak besar dan rumit yang disimpan di JS dan saya perlu menulis beberapa kode untuk memanipulasinya. Untuk mengetahui apa yang saya lakukan dan di mana kesalahan saya, yang benar-benar saya butuhkan adalah untuk dapat melihat struktur data secara keseluruhan, dan memperbaruinya setiap kali saya melakukan perubahan melalui UI.
Semua hal ini dapat saya tangani sendiri, selain dari menemukan cara yang bagus untuk membuang struktur data JavaScript ke string yang dapat dibaca manusia. JSON akan melakukannya, tetapi itu benar-benar perlu diformat dan indentasi dengan baik. Saya biasanya menggunakan barang-barang DOM Firebug yang sangat baik untuk ini, tetapi saya benar-benar harus dapat melihat seluruh struktur sekaligus, yang sepertinya tidak mungkin di Firebug.
Setiap saran dipersilahkan.
Terima kasih sebelumnya.
Jawaban:
Saya menulis sebuah fungsi untuk membuang objek JS dalam bentuk yang dapat dibaca, meskipun hasilnya tidak menjorok, tetapi seharusnya tidak terlalu sulit untuk menambahkan bahwa: Saya membuat fungsi ini dari yang saya buat untuk Lua (yang jauh lebih kompleks ) yang menangani masalah indentasi ini.
Ini adalah versi "sederhana":
Saya akan melihat sedikit meningkatkannya.
Catatan 1: Untuk menggunakannya, lakukan
od = DumpObject(something)
dan gunakan od.dump. Berbelit-belit karena saya ingin nilai len juga (jumlah item) untuk tujuan lain. Itu sepele untuk membuat fungsi mengembalikan hanya string.Catatan 2: itu tidak menangani loop dalam referensi.
EDIT
Saya membuat versi lekukan.
Pilih lekukan Anda di telepon dengan panggilan rekursif, dan Anda menahan gaya dengan mengganti saluran yang dikomentari setelah ini.
... Saya melihat Anda menyiapkan versi Anda sendiri, yang bagus. Pengunjung akan punya pilihan.
sumber
Gunakan Crockford's JSON.stringify seperti ini:
Variabel
text
akan terlihat seperti ini:Ngomong-ngomong, ini tidak membutuhkan lebih dari file JS - itu akan bekerja dengan perpustakaan apa pun, dll
sumber
JSON.stringify((function(){var x = []; x.push(x); return x})())
dan banyak jenis objek lainnyaJSON.stringify(/foo/)
.Anda dapat menggunakan yang berikut ini
sumber
Di
Firebug
, jika Anda baru sajaconsole.debug ("%o", my_object)
dapat mengkliknya di konsol dan masukkan penjelajah objek interaktif. Ini menunjukkan seluruh objek, dan memungkinkan Anda memperluas objek bersarang.sumber
Untuk Node.js, gunakan:
Dokumentasi API
sumber
Bagi mereka yang mencari cara luar biasa untuk melihat objek Anda, periksa prettyPrint.js
Membuat tabel dengan opsi tampilan yang dapat dikonfigurasi untuk dicetak di suatu tempat di dokumen Anda. Lebih baik dilihat daripada di
console
.sumber
Saya sedang pemrograman
Rhino
dan saya tidak puas dengan jawaban yang diposting di sini. Jadi saya sudah menulis printer cantik saya sendiri:Outputnya terlihat seperti ini:
Saya juga mempostingnya sebagai Intisari untuk perubahan apa pun di masa depan yang mungkin diperlukan.
sumber
jsDump
menjadi
QUnit (Kerangka kerja pengujian unit yang digunakan oleh jQuery) menggunakan versi jsDump yang sedikit ditambal.
JSON.stringify () bukan pilihan terbaik pada beberapa kasus.
sumber
Mengambil pimpinan PhiLho (terima kasih banyak :)), saya akhirnya menulis sendiri karena saya tidak bisa membuatnya melakukan apa yang saya inginkan. Ini cukup kasar dan siap, tetapi itu pekerjaan yang saya butuhkan. Terima kasih atas saran yang luar biasa.
Saya tahu itu bukan kode yang brilian, tetapi untuk apa nilainya, ini dia. Seseorang mungkin menganggapnya berguna:
sumber
Ini benar-benar hanya sebuah komentar pada Jason Bunting "Use Crockford's JSON.stringify", tetapi saya tidak dapat menambahkan komentar pada jawaban itu.
Seperti disebutkan dalam komentar, JSON.stringify tidak cocok dengan pustaka Prototipe (www.prototypejs.org). Namun, cukup mudah untuk membuat mereka bermain bersama dengan baik untuk sementara waktu menghapus metode Array.prototype.toJSON yang ditambahkan prototipe, jalankan Crockford's strify (), lalu kembalikan seperti ini:
sumber
Saya pikir respons J. Buntings tentang penggunaan JSON.stringify juga bagus. Selain itu, Anda dapat menggunakan JSON.stringify melalui YUI objek JSON jika Anda menggunakan YUI. Dalam kasus saya, saya perlu membuang ke HTML sehingga lebih mudah untuk hanya men-tweak / memotong / menempel respon PhiLho.
sumber
Banyak orang menulis kode di utas ini, dengan banyak komentar tentang berbagai gotcha. Saya menyukai solusi ini karena sepertinya lengkap dan merupakan file tunggal tanpa ketergantungan.
browser
simpuljs
Ini bekerja "di luar kotak" dan memiliki kedua versi node dan browser (mungkin hanya pembungkus yang berbeda tetapi saya tidak menggali untuk mengkonfirmasi).
Perpustakaan juga mendukung pencetakan XML, SQL dan CSS, tapi saya belum mencoba fitur-fitur itu.
sumber
Yang sederhana untuk mencetak elemen sebagai string:
sumber
Perpustakaan NeatJSON saya memiliki versi Ruby dan JavaScript . Ini tersedia secara bebas di bawah Lisensi MIT (permisif). Anda dapat melihat demo / konverter online di:
http://phrogz.net/JS/neatjson/neatjson.html
Beberapa fitur (semua opsional):
sumber
flexjson menyertakan fungsi prettyPrint () yang mungkin memberi Anda apa yang Anda inginkan.
sumber