Multiline string JSON

I'm menulis beberapa file data dalam format JSON dan ingin memiliki beberapa benar-benar panjang nilai string dibagi atas beberapa baris. Menggunakan python's JSON modul saya mendapatkan banyak kesalahan, baik yang saya gunakan \ atau \n sebagai pelarian.

Apakah mungkin untuk memiliki multi-line string JSON? It's kebanyakan untuk kenyamanan visual jadi saya kira saya hanya dapat mengubah word wrap di dalam editor saya, tapi saya'm hanya agak penasaran...

Mengomentari pertanyaan (4)

JSON tidak memungkinkan real-garis istirahat. Anda perlu mengganti semua baris dengan \n.

misalnya:

"baris pertama baris kedua"

dapat disimpan dengan:

"baris pertama\nsecond line"

Catatan:

untuk Python, ini harus ditulis sebagai:

"baris pertama\\nsecond line"

di mana \\ adalah untuk melarikan diri backslash, jika tidak python akan memperlakukan \n sebagai kontrol karakter "baru"

Komentar (8)

Aku harus melakukan ini untuk Node.js proyek ini work-around:


{
 "modify_head": [

  "<script type='text/javascript'>",
  "",
  "</script>"

 ],

 "modify_body": [

  "<input type='text' id='inputtext'>
Komentar (7)

Check out spesifikasi! JSON tata bahasa's char produksi dapat mengambil nilai-nilai berikut:

  • any-Unicode-karakter-kecuali-"atau\-atau-control-character
  • \"
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u four-hex-digits

Baris ini adalah "kontrol karakter" jadi, tidak, anda mungkin tidak memiliki literal baris baru dalam string. Namun anda dapat encode menggunakan kombinasi apapun dari \n dan \r yang anda butuhkan.

Komentar (5)

Sayangnya banyak dari jawaban-jawaban berikut ini menjawab pertanyaan tentang bagaimana untuk menempatkan karakter baris baru dalam string data. Pertanyaannya adalah bagaimana membuat kode terlihat lebih bagus dengan memisahkan nilai string di beberapa baris kode. (Dan bahkan jawaban yang menyadari hal ini memberikan "solusi" yang menganggap satu adalah gratis untuk mengubah representasi data, yang dalam banyak kasus adalah tidak.)

Dan kabar buruk, tidak ada jawaban yang baik.

Dalam banyak bahasa pemrograman, bahkan jika mereka don't secara eksplisit mendukung pemisahan string di baris, anda masih dapat menggunakan rangkaian string untuk mendapatkan efek yang diinginkan; dan sebagai compiler isn't mengerikan ini baik-baik saja.

Tapi json adalah bukan bahasa pemrograman; it's hanya sebuah representasi data. Anda dapat't tell it untuk menggabungkan string. Atau tidak (cukup kecil) tata bahasa mencakup setiap sarana untuk mewakili string pada beberapa baris.

Pendek karangan pra-prosesor dari beberapa jenis (dan saya, untuk satu, don't merasa seperti efektif membuat bahasa saya sendiri untuk memecahkan masalah ini), ada isn't sebuah solusi umum untuk masalah ini. JIKA anda dapat mengubah format data, maka anda dapat mengganti sebuah array dari string. Jika tidak, ini adalah salah satu dari banyak cara bahwa json isn't dirancang untuk manusia-mudah dibaca.

Komentar (3)

JSON doesn't membiarkan melanggar garis untuk dibaca.

Anda bertaruh terbaik adalah untuk menggunakan IDE yang akan line-bungkus untuk anda.

Komentar (1)

Ini adalah benar-benar pertanyaan lama, tapi saya datang di ini pada pencarian dan saya pikir saya tahu sumber masalah anda.

JSON tidak memungkinkan "nyata" baris di data; itu hanya bisa melarikan diri baris. Lihat jawaban dari @ANDA. Menurut pertanyaannya, sepertinya anda berusaha untuk melarikan diri garis istirahat di Python dua cara: dengan menggunakan garis kelanjutan karakter ("\") atau dengan menggunakan "\n" sebagai pelarian.

Namun perlu diingat: jika anda menggunakan string di python, khusus melarikan diri karakter (" t", "\n") yang diterjemahkan ke REAL kontrol karakter! The "\n" akan diganti dengan karakter kontrol ASCII yang mewakili karakter newline, yang justru karakter yang ilegal di JSON. (Adapun kelanjutan baris karakter, itu hanya mengambil newline keluar.)

Jadi apa yang perlu anda lakukan adalah untuk mencegah Python dari escaping karakter. Anda dapat melakukan ini dengan menggunakan baku string (put r di depan string, seperti dalam r"abc\ndef", atau dengan memasukkan tambahan slash di depan newline ("abc\\ndef").

Kedua hal di atas akan, bukan menggantikan "\n" dengan real newline karakter kontrol ASCII, akan meninggalkan "\n" sebagai dua literal karakter, yang kemudian JSON dapat menafsirkan sebagai newline melarikan diri.

Komentar (0)

Adalah mungkin untuk memiliki multi-line string JSON?

Ya. Aku hanya diuji sekarang ini dengan Firefox web browser dengan menekan F12, klik console dan mengetik di bagian bawah layar.

x={text:"hello\nworld"}

Objek x memiliki hanya telah dibuat dari format JSON string yang berisi multi-line string.

console.log(x.text)
hello
world

x.teks akan ditampilkan dan menunjukkan bahwa itu adalah multi-line string.

Kedua tes menunjukkan bahwa Firefox's Javascript penerjemah adalah senang untuk membuat dan menggunakan JSON dengan multiline string.

Tes lagi dengan JSON.stringify dan JSON.mengurai menunjukkan Javascript penerjemah dapat mengkonversi objek yang berisi string multiline untuk JSON dan mengurai kembali lagi dengan tidak ada masalah sama sekali.

Aku memiliki masa lalu yang tersimpan lengkap karya Shakespeare besar sebagai sebuah properti di objek JSON dan kemudian dikirim melalui internet, tidak rusak.

Contoh

Berikut adalah dua baris string yang dimasukkan lebih dari tiga baris

x={text:"expert\
s\nex\
change"}

Kita dapat menampilkan objek

console.log(x)

memberikan

Object { text: "experts\nexchange" }

atau string

console.log(x.text)

memberikan

experts
exchange

Akhir baris dalam string hasil dari menggunakan \n dan beberapa saluran input yang dicapai dengan hanya menggunakan \ di akhir baris.

Dalam prakteknya, anda mungkin ingin untuk melakukan sinkronisasi akhir baris dengan orang-orang dalam string, misal:

x={text:"experts\n\
exchange"}

Multi-Line String Panjang

console.log("Hello\nWorld".length)
11 
console.log("Hello World".length)
11

Perhatikan bahwa string dengan newline tidak lebih panjang dari string dengan spasi. Meskipun dua karakter yang diketik pada keyboard ('\' dan 'n'), hanya satu karakter yang disimpan dalam string.

Komentar (1)

Menulis nilai properti sebagai array dari string. Seperti contoh yang diberikan di sini https://gun.io/blog/multi-line-strings-in-json/. Ini akan membantu.

Kita dapat menggunakan array dari string untuk multiline string seperti berikut ini.

{
    "singleLine": "Some singleline String",
    "multiline": ["Line one", "line Two", "Line Three"]
} 

Dan kita dapat dengan mudah beralih array untuk menampilkan konten di multi line fashion.

Komentar (2)

Menggunakan regex untuk mengganti semua kejadian \r\n dengan \\n.

Ini bekerja untuk saya di scala.

val newstr = str.replace("\r\n", "\\n")
Komentar (2)

Gunakan json5 (loader) melihat https://json5.org/ - contoh (oleh json5)

{
  lineBreaks: "Look, Mom! \
No \\n's!",
}
Komentar (1)

Jika anda bersedia untuk menggunakan Node.js anda dapat melakukan ini:

module.exports = {

  multilineStr: `

     dis my life 
     it's now or never

  `

}

anda dapat mengimpor dengan Node.js dan mengkonversi ke JSON dengan mudah seperti:

echo `node -pe 'JSON.stringify(require("./json-mod.js"))'`

dan anda mendapatkan:

{"multilineStr":"\n \n dis my life\n it's now or never\n \n "}

cara bekerja: anda menggunakan Node.js untuk memuat JS modul, yang menciptakan JS objek yang dapat dengan mudah menjadi JSON stringified oleh Node.js. Opsi-e mengevaluasi string, dan -p pilihan menggemakan kembali hasil terakhir Node.js operasi ke stdout.

Jika anda ingin memuat .js script yang's dalam direktori kerja, anda harus beralih "" dan '' string:

my_script='../json-mod.js'
echo `node -pe "JSON.stringify(require('$my_script'))"`
Komentar (1)

Mencoba menggunakan base64 dikodekan nilai string. Bekerja untuk saya sebagian besar waktu.

{
    "singleLine": "Some singleline String",
    "multiline": ["Line one", "line Two", "Line Three"]
} 

setelah base64 encoded string terlihat seperti

{
    "singleLine": "Some singleline String",
    "multiline": "TGluZSBvbmUKTGluZSBUd28KTGluZSBUaHJlZQ=="
} 

base64 encoding dan decoding tersedia dalam semua bahasa.

Komentar (2)

menempatkan multiline text pada file txt dan kemudian

var str = {
    text: cat('path_to_file/text.txt')
}

(bekerja's pada mongoDB)

Komentar (1)