Saya memiliki file JSON yang berantakan yang ingin saya cetak sebelumnya - apa cara termudah untuk melakukan ini dengan python? Saya tahu PrettyPrint mengambil "objek", yang saya pikir bisa menjadi file, tapi saya tidak tahu cara mengirim file - hanya menggunakan nama file tidak bekerja.
python
json
formatting
pretty-print
Gadis
sumber
sumber
json.loads()
dan cukup cetak kamus yang dihasilkan. Atau langsung saja ke bagian Pencetakan cantik dokumentasijson
Python untuk .<your_file.js python -mjson.tool
seperti di tautan @ ed?Jawaban:
The
json
modul sudah mengimplementasikan beberapa pencetakan cukup mendasar denganindent
parameter:Untuk mem-parsing file, gunakan
json.load()
:sumber
print json.dumps(your_json_string, indent=4)
print(json.dumps(json.loads(your_json_string), indent=2))
jika tidak, itu hanya menunjukkan saya sebuah string yang lolosAnda dapat melakukan ini di baris perintah:
(seperti yang telah disebutkan dalam komentar untuk pertanyaan, terima kasih kepada @Kai Petzke untuk saran python3).
Sebenarnya python bukanlah alat favorit saya sejauh json memproses pada baris perintah. Untuk pencetakan yang cukup sederhana tidak masalah, tetapi jika Anda ingin memanipulasi json, ini bisa menjadi rumit. Anda akan segera perlu menulis file skrip terpisah, Anda bisa berakhir dengan peta yang kuncinya adalah "some-key" (python unicode), yang membuat memilih bidang lebih sulit dan tidak benar-benar mengarah ke arah yang cantik -pencetakan.
Anda juga dapat menggunakan jq :
dan Anda mendapatkan warna sebagai bonus (dan cara perpanjangan lebih mudah).
Tambahan: Ada beberapa kebingungan dalam komentar tentang menggunakan jq untuk memproses file JSON besar di satu sisi, dan memiliki program jq yang sangat besar di sisi lain. Untuk mencetak file yang terdiri dari satu entitas JSON besar, batasan praktisnya adalah RAM. Untuk pencetakan cantik 2GB file yang terdiri dari satu array data dunia nyata, "ukuran set penduduk maksimum" yang diperlukan untuk pencetakan cantik adalah 5GB (apakah menggunakan jq 1.5 atau 1.6). Perhatikan juga bahwa jq dapat digunakan dari dalam python sesudahnya
pip install jq
.sumber
jq '' < some.json
python3 -m json.tool <IN >OUT
, karena ini menjaga urutan asli bidang dalam dikts JSON. Penerjemah python versi 2 mengurutkan bidang dalam urutan alfabet, yang sering kali bukan, yang Anda inginkan.Anda dapat menggunakan modul pprint built-in (https://docs.python.org/3.6/library/pprint.html) .
Bagaimana Anda dapat membaca file dengan data json dan mencetaknya.
sumber
Pygmentize + Python json.tool = Cetak Cantik dengan Sintaks Menyoroti
Menghitung harga adalah alat pembunuh. Lihat ini.
Saya menggabungkan python json.tool dengan pygmentize
Lihat tautan di atas untuk menghitung instruksi instalasi.
Demo ini ada pada gambar di bawah ini:
sumber
-g
sebenarnya tidak berfungsi;) Karena input berasal dari stdin, menghitung tidak dapat membuat perkiraan yang baik. Anda perlu menentukan lexer secara eksplisit:echo '{"foo": "bar"}' | python -m json.tool | pygmentize -l json
Gunakan fungsi ini dan jangan berkeringat karena harus mengingat apakah JSON Anda adalah
str
ataudict
lagi - lihat saja hasil cetaknya:sumber
Saya pernah menulis
prettyjson()
fungsi untuk menghasilkan output yang terlihat bagus. Anda dapat mengambil implementasinya dari repo ini .Fitur utama dari fungsi ini adalah ia mencoba untuk menyimpan dict dan daftar item dalam satu baris sampai
maxlinelength
tercapai. Ini menghasilkan lebih sedikit garis JSON, output terlihat lebih kompak dan lebih mudah dibaca.Anda dapat menghasilkan output semacam ini misalnya:
UPD Dec'19: Saya menempatkan kode ke dalam repo yang terpisah , mengoreksi beberapa bug dan membuat beberapa tweak lainnya.
sumber
Agar dapat cukup mencetak dari baris perintah dan dapat memiliki kontrol atas lekukan, dll. Anda dapat mengatur alias yang mirip dengan ini:
Dan kemudian gunakan alias dalam salah satu cara ini:
sumber
Gunakan pprint: https://docs.python.org/3.6/library/pprint.html
print()
dibandingkan denganpprint.pprint()
sumber
pprint
tidak menghasilkan dokumen JSON yang valid.Berikut adalah contoh sederhana pencetakan JSON ke konsol dengan cara yang menyenangkan di Python, tanpa mengharuskan JSON berada di komputer Anda sebagai file lokal:
sumber
Ini berfungsi untuk menampilkan atau menyimpannya ke file.
sumber
Saya pikir itu lebih baik untuk mengurai json sebelumnya, untuk menghindari kesalahan:
sumber
Anda dapat mencoba pprintjson .
Instalasi
Pemakaian
Cukup cetak JSON dari file menggunakan CLI pprintjson.
Cukup cetak JSON dari stdin menggunakan CLI pprintjson.
Cukup cetak JSON dari sebuah string menggunakan CLI pprintjson.
Cukup cetak JSON dari string dengan indentasi 1.
Cukup cetak JSON dari string dan simpan output ke file output.json.
Keluaran
sumber
Ini jauh dari sempurna, tetapi berhasil.
Anda dapat memperbaikinya, menambahkan indentasi dan sebagainya, tetapi jika Anda hanya ingin dapat membaca json yang lebih bersih, inilah cara yang harus dilakukan.
sumber