Saya sedang menulis beberapa file data dalam format JSON dan ingin memiliki nilai string yang sangat panjang dibagi menjadi beberapa baris. Menggunakan modul JSON python saya mendapatkan banyak kesalahan, apakah saya menggunakan \
atau \n
sebagai pelarian.
Apakah mungkin memiliki string multi-line di JSON? Ini sebagian besar untuk kenyamanan visual jadi saya kira saya bisa mengaktifkan bungkus kata di editor saya, tapi saya hanya ingin tahu ...
Jawaban:
JSON tidak mengizinkan jeda baris nyata. Anda harus mengganti semua jeda baris dengan
\n
.misalnya:
"first line second line"
dapat disimpan dengan:
"first line\nsecond line"
catatan:
karena
Python
, ini harus ditulis sebagai:"first line\\nsecond line"
di mana
\\
untuk menghindari backslash, jika tidak python akan memperlakukan\n
sebagai karakter kontrol "baris baru"sumber
\n
dan mengeluarkannya melalui Kutukan),\n
tampaknya berfungsi dengan baik. Tergantung pada tampilan / rendering engine, tampaknya.Saya harus melakukan ini untuk proyek Node.js kecil dan menemukan ini berhasil :
Ini terlihat sangat rapi bagi saya, mulai dari itu saya harus menggunakan tanda kutip ganda di mana-mana. Meskipun sebaliknya, saya bisa, mungkin, menggunakan YAML, tetapi yang memiliki jebakan lain dan tidak didukung secara native. Setelah diurai, saya hanya menggunakan
myData.modify_head.join('\n')
ataumyData.modify_head.join()
, tergantung pada apakah saya ingin garis putus setelah setiap string atau tidak.sumber
Sayangnya banyak jawaban di sini menjawab pertanyaan tentang bagaimana cara menempatkan karakter baris baru dalam data string. Pertanyaannya adalah bagaimana membuat kode terlihat lebih bagus dengan memisahkan nilai string di beberapa baris kode. (Dan bahkan jawaban yang mengenali ini memberikan "solusi" yang berasumsi seseorang bebas untuk mengubah representasi data, yang dalam banyak kasus tidak.)
Dan berita buruknya adalah, tidak ada jawaban yang bagus.
Dalam banyak bahasa pemrograman, bahkan jika mereka tidak secara eksplisit mendukung pemisahan string di seluruh baris, Anda masih dapat menggunakan penggabungan string untuk mendapatkan efek yang diinginkan; dan selama kompilernya tidak buruk, ini bagus.
Tetapi json bukanlah bahasa pemrograman; itu hanya representasi data. Anda tidak bisa mengatakannya untuk menyatukan string. Tata bahasanya (yang cukup kecil) tidak menyertakan fasilitas apa pun untuk merepresentasikan string pada banyak baris.
Singkatnya merancang semacam pra-prosesor (dan saya, untuk satu, tidak merasa seperti secara efektif membuat bahasa saya sendiri untuk menyelesaikan masalah ini), tidak ada solusi umum untuk masalah ini. JIKA Anda bisa mengubah format data, maka Anda bisa mengganti array string. Kalau tidak, ini adalah salah satu dari banyak cara yang tidak dirancang json untuk keterbacaan manusia.
sumber
Lihat spesifikasinya ! Produksi char grammar JSON dapat mengambil nilai-nilai berikut:
"
-atau-\
-atau-kontrol-karakter\"
\\
\/
\b
\f
\n
\r
\t
\u
empat-hex-digitBaris baru adalah "karakter kontrol" jadi, tidak, Anda mungkin tidak memiliki baris baru literal dalam string Anda. Namun Anda dapat menyandikannya menggunakan kombinasi apa pun
\n
dan yang\r
Anda perlukan.sumber
JSON tidak mengizinkan garis putus-putus untuk dibaca.
Taruhan terbaik Anda adalah menggunakan IDE yang akan digunakan untuk Anda.
sumber
Ini adalah pertanyaan yang sangat lama, tetapi saya menemukan ini pada pencarian dan saya pikir saya tahu sumber masalah Anda.
JSON tidak mengizinkan baris baru "nyata" dalam datanya; hanya bisa lolos dari baris baru. Lihat jawabannya dari @ YOU . Menurut pertanyaan, sepertinya Anda mencoba untuk melarikan diri dari jeda baris dalam Python dua cara: dengan menggunakan karakter kelanjutan garis (
"\"
) atau dengan menggunakan"\n"
sebagai pelarian.Namun perlu diingat: jika Anda menggunakan string dalam python, karakter khusus yang lolos (
"\t"
,"\n"
) diterjemahkan ke dalam karakter kontrol NYATA! The"\n"
akan diganti dengan karakter kontrol ASCII mewakili karakter baris baru, yang justru karakter yang ilegal di JSON. (Adapun karakter kelanjutan garis, itu hanya mengeluarkan baris baru.)Jadi yang perlu Anda lakukan adalah mencegah Python keluar dari karakter. Anda dapat melakukan ini dengan menggunakan string mentah (diletakkan
r
di depan string, seperti dir"abc\ndef"
, atau dengan memasukkan garis miring tambahan di depan baris baru ("abc\\ndef"
).Kedua hal di atas, alih-alih mengganti
"\n"
dengan karakter kontrol ASCII baris baru yang sebenarnya, akan meninggalkan"\n"
sebagai dua karakter literal, yang kemudian dapat ditafsirkan JSON sebagai pelarian baris baru.sumber
Tulis nilai properti sebagai array string. Seperti contoh yang diberikan di sini https://gun.io/blog/multi-line-strings-in-json/ . Ini akan membantu.
Kita selalu dapat menggunakan array string untuk string multiline seperti berikut.
Dan kita dapat dengan mudah beralih array untuk menampilkan konten dalam mode multi-line.
sumber
Gunakan json5 (loader) lihat https://json5.org/ - contoh (oleh json5)
sumber
Apakah mungkin memiliki string multi-line di JSON?
Iya. Saya baru saja menguji ini sekarang dengan browser web Firefox saya dengan menekan F12, mengklik konsol dan mengetik di bagian bawah layar.
Objek x baru saja dibuat dari string format JSON yang berisi string multi-line.
x.text ditampilkan yang menunjukkan bahwa itu adalah string multi-line.
Dua tes ini menunjukkan bahwa penerjemah Javascript Firefox senang membuat dan menggunakan JSON dengan string multiline.
Lebih banyak tes dengan
JSON.stringify
danJSON.parse
menunjukkan Javascript interpreter dapat mengonversi objek yang berisi string multiline ke JSON dan menguraikannya kembali tanpa masalah sama sekali.Di masa lalu saya telah menyimpan karya lengkap Shakespeare sebagai properti dalam objek JSON dan kemudian mengirimkannya melalui internet, tanpa gangguan.
Contoh
Berikut adalah dua garis string yang dimasukkan lebih dari tiga baris
Kami dapat menampilkan objek
memberi
atau string
memberi
Akhir baris dalam hasil string dari menggunakan \ n dan beberapa baris input dicapai hanya menggunakan \ di akhir baris.
Dalam praktiknya Anda mungkin ingin menyinkronkan ujung baris Anda dengan yang ada di string, mis
Panjang String Multi-Line
Perhatikan bahwa string dengan baris baru tidak lebih panjang dari string dengan spasi. Meskipun dua karakter diketik pada keyboard ('\' dan 'n'), hanya satu karakter yang disimpan dalam string.
sumber
x={"a":NaN}
danx={"a":"a \<literal newline with SHIFT>b"}
, yang bukan JSON, tetapi JavaScriptGunakan regex untuk mengganti semua kemunculan
\r\n
dengan\\n
.Ini bekerja untuk saya dalam scala.
sumber
Jika Anda bersedia menggunakan Node.js, Anda dapat melakukan ini:
Anda dapat mengimpor dengan Node.js dan mengonversinya ke JSON dengan mudah seperti:
dan Anda mendapatkan:
cara kerjanya : Anda menggunakan Node.js untuk memuat modul JS, yang membuat objek JS yang dapat dengan mudah diubah menjadi JSON oleh Node.js. Opsi -e mengevaluasi string, dan
-p
opsi menggemakan hasil kembalinya operasi Node.js terakhir ke stdout.Jika Anda ingin memuat skrip .js yang ada di direktori kerja yang berbeda, Anda harus mengganti string "" dan '':
sumber
Coba gunakan
base64
nilai string yang disandikan. Bekerja untuk saya sebagian besar waktu.setelah
base64
string dikodekan terlihat sepertiencoding dan decoding base64 tersedia dalam semua bahasa.
sumber
letakkan teks multiline pada file txt lalu
(Ini bekerja pada mongoDB)
sumber
cat
.