Mencari fungsi yang akan menggunakan string
Json sebagai input dan memformatnya dengan jeda baris dan indentasi. Validasi akan menjadi bonus, tetapi tidak perlu, dan saya tidak perlu menguraikannya menjadi objek atau apa pun.
Adakah yang tahu tentang perpustakaan seperti itu?
Contoh masukan:
{"status":"OK", "results":[ {"types":[ "locality", "political"], "formatted_address":"New York, NY, USA", "address_components":[ {"long_name":"New York", "short_name":"New York", "types":[ "locality", "political"]}, {"long_name":"New York", "short_name":"New York", "types":[ "administrative_area_level_2", "political"]}, {"long_name":"New York", "short_name":"NY", "types":[ "administrative_area_level_1", "political"]}, {"long_name":"United States", "short_name":"US", "types":[ "country", "political"]}], "geometry":{"location":{"lat":40.7143528, "lng":-74.0059731}, "location_type":"APPROXIMATE", "viewport":{"southwest":{"lat":40.5788964, "lng":-74.2620919}, "northeast":{"lat":40.8495342, "lng":-73.7498543}}, "bounds":{"southwest":{"lat":40.4773990, "lng":-74.2590900}, "northeast":{"lat":40.9175770, "lng":-73.7002720}}}}]}
c#
json
formatting
mpen
sumber
sumber
Jawaban:
Saya memperbarui versi lama, sekarang harus mendukung nilai yang tidak dikutip seperti integer dan boolean.
Saya merefaktor versi sebelumnya dan mendapatkan versi terakhir: Kode ini lebih pendek dan lebih bersih. Hanya membutuhkan satu metode ekstensi. Yang paling penting: memperbaiki beberapa bug.
sumber
"url":"url('http://google.com')"
format ke"url":"url('http : //google.com')"
. spasi ditambahkan sebelum dan setelah ":" kedua yang salah..ToList()
diIEnumerable
alih - alih membuat metode baru? jika Anda menggunakanMoreLinq
dalam proyek Anda, ini juga akan mendukung.ForEach()
diIEnumerable
luar kotak.Anda juga bisa menggunakan perpustakaan Newtonsoft.Json untuk ini dan memanggil SerializeObject dengan enum Formatting.Indented -
Dokumentasi: Menyusun Objek
Perbarui -
Coba lagi. Cukup yakin ini dulu berfungsi - mungkin berubah di versi berikutnya atau mungkin saya hanya membayangkan sesuatu. Bagaimanapun, sesuai komentar di bawah, itu tidak berfungsi seperti yang diharapkan. Namun demikian (baru saja diuji di linqpad). Yang pertama adalah dari komentar, yang kedua adalah contoh yang saya temukan di tempat lain di SO -
sumber
var obj = JsonConvert.DeserializeObject(jsonString); var formatted = JsonConvert.SerializeObject(obj, Formatting.Indented)
(yaitu deserialise ke objek temp, lalu kembali ke json) - benar-benar bukan metode yang paling efisien, tetapi itu setidaknya berhasil!Sampel yang lebih pendek untuk pustaka json.net.
NB: Anda dapat membungkus teks json yang diformat dengan tag untuk dicetak seperti pada halaman html.
sumber
Berikut adalah versi ringkas dari penghias JSON.
Keluaran:
sumber
Bahkan lebih sederhana yang baru saja saya tulis:
Ekstensi yang diperlukan:
Output sampel:
sumber
"url":"url('http://google.com')"
akan diformat ke"url":"url('http : //google.com')"
.Sudah ada banyak jawaban bagus di sini yang menggunakan Newtonsoft.JSON , tapi inilah satu lagi yang digunakan
JObject.Parse
dalam kombinasi denganToString()
, karena itu belum disebutkan:sumber
Saya sangat terkesan dengan formatter JSON kompak oleh Vince Panuccio .
Ini adalah versi perbaikan yang sekarang saya gunakan:
Ini memperbaiki masalah berikut:
Keluaran:
sumber
Alasan utama menulis fungsi Anda sendiri adalah karena framework JSON biasanya melakukan parsing string menjadi tipe .net dan mengubahnya kembali menjadi string, yang dapat mengakibatkan hilangnya string asli. Misalnya 0,0002 menjadi 2E-4
Saya tidak memposting fungsi saya (ini cukup sama dengan yang lain di sini) tetapi berikut adalah kasus uji
sumber
Anda harus melewati
\r
dan\n
masukPrettyPrint()
. Keluarannya terlihat lucu karena ada beberapa crlf yang sudah ada (atau sumbernya sudah diformat).sumber
Memperbaiki ... agak.
kredit[tautan mati]sumber
Seperti yang ditunjukkan benjymous , Anda dapat menggunakan Newtonsoft.Json dengan objek sementara dan deserialize / serialize.
sumber
Semua kredit untuk Frank Tzanabetis. Namun ini adalah contoh langsung terpendek, yang juga bertahan dalam kasus string kosong atau string JSON asli rusak:
sumber
Ini akan menempatkan setiap item di baris baru
VB.NET
C #
sumber
Ini adalah varian dari jawaban yang diterima yang suka saya gunakan. Bagian yang dikomentari menghasilkan apa yang saya anggap sebagai format yang lebih mudah dibaca (Anda perlu mengomentari kode yang berdekatan untuk melihat perbedaannya):
sumber
Cukup gunakan
JsonDocument
danUtf8JsonWriter
. Tidak diperlukan perpustakaan pihak ketiga. Tidak ada objek target untuk deserialisasi yangjsonString
diperlukan.sumber
JsonDocument.Parse
apa? Tentunya itu membuat deserializes itu?J Bryan Price, contoh yang bagus, tapi ada kekurangannya
setelah memformat
bias yang tidak tepat :(
sumber
Contoh
sumber
Versi ini menghasilkan JSON yang lebih ringkas dan menurut saya lebih mudah dibaca karena Anda dapat melihat lebih banyak sekaligus. Ini dilakukan dengan memformat lapisan terdalam sebaris atau seperti struktur array yang ringkas.
Kode tersebut tidak memiliki ketergantungan tetapi lebih kompleks.
Kode berikut
Fungsi ini memungkinkan Anda menentukan titik awal untuk lekukan karena saya menggunakan ini sebagai bagian dari proses yang merakit file cadangan berformat JSON yang sangat besar.
sumber
Ini berfungsi untuk saya menggunakan System.Text.Json di .Net Core 3.1
sumber