Adakah yang tahu cara sederhana untuk mencetak keluaran JSON di Go?
Paket stok http://golang.org/pkg/encoding/json/ tampaknya tidak menyertakan fungsionalitas untuk ini (EDIT: ya, lihat jawaban yang diterima) dan google cepat tidak muncul dengan jelas.
Penggunaan yang saya cari sama-sama mencetak hasil json.Marshal
dan hanya memformat string penuh JSON dari mana saja, jadi lebih mudah dibaca untuk keperluan debug.
json
go
pretty-print
Brad Peabody
sumber
sumber
{name: "value"}
tidak akan apa-apa, meskipun sebagian besar penerjemah Javascript menggunakannya . Hanya{"name": "value"}
akan berfungsi dengan fungsi pustaka Go JSON.Jawaban:
Dengan cukup-cetak, saya menganggap Anda maksud indentasi, seperti itu
daripada
Cara termudah untuk melakukan ini adalah dengan
MarshalIndent
, yang akan memungkinkan Anda menentukan bagaimana Anda ingin indentasi melaluiindent
argumen. Dengan demikian,json.MarshalIndent(data, "", " ")
akan cukup mencetak menggunakan empat spasi untuk lekukan.sumber
json.MarshalIndent(data, "", "\t")
jika Anda ingin tab.json.MarshalIndent(data, "", "🐱")
jika Anda ingin kucing. maafjson.MarshalIndent(data, "", "\t🐱")
jika Anda ingin ... kucing kucing ... maafJawaban yang diterima sangat bagus jika Anda memiliki objek yang ingin Anda ubah menjadi JSON. Pertanyaannya juga menyebutkan cukup mencetak sembarang string JSON, dan itulah yang saya coba lakukan. Saya hanya ingin mencatat beberapa JSON dari permintaan POST (khususnya laporan pelanggaran CSP ).
Untuk menggunakannya
MarshalIndent
, Anda harusUnmarshal
mengubahnya menjadi objek. Jika Anda membutuhkannya, lakukan saja, tetapi saya tidak melakukannya. Jika Anda hanya perlu mencetak array byte yang cantik, plainIndent
adalah teman Anda.Inilah yang akhirnya saya dapatkan:
sumber
Untuk penggunaan memori yang lebih baik, saya kira ini lebih baik:
sumber
SetIndent
ditambahkan baru-baru ini? Ini pada dasarnya tidak diketahui oleh kebanyakan orang.SetIndent
(awalnya bernamaIndent
) tampaknya ditambahkan Maret 2016 dan dirilis di Go 1.7, yang sekitar 3 tahun setelah pertanyaan ini awalnya diajukan: github.com/golang/go/commit/… github.com/golang/go/commit/ …Saya merasa frustrasi dengan kurangnya cara yang cepat dan berkualitas tinggi untuk menyusun JSON ke string berwarna di Go sehingga saya menulis Marshaller saya sendiri yang disebut ColorJSON .
Dengannya, Anda dapat dengan mudah menghasilkan output seperti ini menggunakan kode yang sangat sedikit:
Saya sedang menulis dokumentasi untuk itu sekarang tetapi saya bersemangat untuk membagikan solusi saya.
sumber
Sunting Melihat ke belakang, ini adalah Go non-idiomatik. Fungsi pembantu kecil seperti ini menambah langkah kompleksitas tambahan. Secara umum, filosofi Go lebih suka memasukkan 3 baris sederhana di atas 1 garis rumit.
Seperti @robyoder sebutkan,
json.Indent
adalah caranya. Kupikir aku akan menambahkanprettyprint
fungsi kecil ini :https://go-sandbox.com/#/R4LWpkkHIN atau http://play.golang.org/p/R4LWpkkHIN
sumber
Inilah yang saya gunakan. Jika gagal mencetak JSON, itu hanya mengembalikan string asli. Berguna untuk mencetak respons HTTP yang seharusnya berisi JSON.
sumber
Ini solusinya :
sumber
Printer sederhana sederhana dari rak di Go. Satu dapat mengkompilasinya ke biner melalui:
Bunyinya dari input standar, menulis ke output standar dan memungkinkan untuk mengatur indentasi:
Ini memungkinkan untuk menjalankan perintah bash seperti:
sumber
sumber
saya agak baru untuk pergi, tapi ini yang saya kumpulkan sejauh ini:
Ini adalah eksekusi fungsi, dan hanya standar
Kode:
sumber
sumber