Saya telah menghasilkan beberapa JSON dan saya mencoba menariknya ke dalam objek di JavaScript. Saya terus mendapatkan kesalahan. Inilah yang saya miliki:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
Ini memberi saya kesalahan:
unterminated string literal
Dengan JSON.parse(data)
, saya melihat pesan kesalahan serupa: "Unexpected token ↵
" di Chrome, dan " unterminated string literal
" di Firefox dan IE.
Ketika saya mengambil \n
setelah sometext
kesalahan hilang dalam kedua kasus. Saya tidak bisa mencari tahu mengapa hal itu \n
membuat eval
dan JSON.parse
gagal.
javascript
json
newline
beruang kutub
sumber
sumber
Jawaban:
Saya kira inilah yang Anda inginkan:
(Anda harus keluar dari "\" di string Anda (mengubahnya menjadi dobel - "\"), jika tidak, ia akan menjadi baris baru di sumber JSON, bukan data JSON.)
sumber
Anda akan perlu memiliki fungsi yang menggantikan
\n
untuk\\n
dalam kasusdata
ini tidak literal string yang.Hasilnya
dataObj
akansumber
.replace("\\n", "\\\\n")
) dan saya juga akan menyarankan menggunakan regex untuk memungkinkan mengganti beberapa instance (yaitu.replace(/\n/g, "\\\\n")
).replace("\n", "\\n")
harus melakukan pekerjaan dengan baik !! Misalnya,var test = [{"description":"Some description about the product. This can be multi-line text."}]; console.log(JSON.parse(test.replace(/\n/g, "\\n")));
akan menampilkan objek dengan sangat baik ke konsol peramban sebagai[{"description":"Some description about the product.\nThis can be multi-line text."}]
\n
pada nilai.eval
fungsi. 17 suara positif ???Menurut spesifikasi, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf :
Jadi, Anda tidak dapat lulus
0x0A
atau0x0C
kode secara langsung. Itu dilarang! Spesifikasi menyarankan untuk menggunakan sekuens escape untuk beberapa kode yang didefinisikan dengan baik dariU+0000
keU+001F
:\f
mewakili karakter umpan formulir (U+000C
).\n
mewakili karakter umpan baris (U+000A
).Karena sebagian besar bahasa pemrograman menggunakan
\
untuk mengutip, Anda harus menghindari sintaks escape (double-escape - sekali untuk bahasa / platform, satu kali untuk JSON itu sendiri):sumber
Anda bisa saja melepaskan string Anda di server ketika menulis nilai bidang JSON dan menghapusnya ketika mengambil nilai di browser klien, misalnya.
Implementasi JavaScript dari semua browser utama memiliki perintah unescape.
Contoh:
Di server:
Di browser:
sumber
Anda mungkin ingin melihat fungsi C # ini untuk keluar dari string:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
sumber
>
?Saya menggunakan fungsi ini untuk menghapus baris baru atau karakter lain dalam data untuk mem-parsing data JSON:
sumber
JSON.stringify
akan mengonversi string di atas ke
seperti yang disebutkan di sini
json merangkai
sumber
Saya mengalami masalah saat membuat kelas di PHP 4 untuk meniru json_encode (tersedia dalam PHP 5). Inilah yang saya pikirkan:
Saya mengikuti aturan yang disebutkan di sini . Saya hanya menggunakan apa yang saya butuhkan, tetapi saya pikir Anda dapat menyesuaikannya dengan kebutuhan Anda dalam bahasa yang Anda gunakan. Masalah dalam kasus saya bukan tentang baris baru seperti yang saya pikirkan, tetapi tentang / tidak melarikan diri. Saya harap ini mencegah orang lain dari sakit kepala kecil saya telah mencari tahu apa yang saya lakukan salah.
sumber
Seperti yang saya mengerti Anda pertanyaan, itu bukan tentang parsing JSON karena Anda dapat copy-paste JSON Anda ke dalam kode Anda langsung - jadi jika hal ini terjadi maka hanya menyalin JSON Anda langsung ke
dataObj
variabel tanpa membungkusnya dengan tanda kutip tunggal (tip:eval==evil
)sumber