JSON biçiminde bazı veri dosyaları yazıyorum ve bazı gerçekten uzun dize değerlerinin birden çok satıra bölünmesini istiyorum. Python'un JSON modülünü kullandığımda, kaçış olarak `veya
\n` kullansam da bir sürü hata alıyorum.
JSON'da çok satırlı dizelere sahip olmak mümkün mü? Çoğunlukla görsel rahatlık için, bu yüzden sanırım editörümde kelime kaydırmayı açabilirim, ama sadece merak ediyorum ...
JSON gerçek satır kesmelerine izin vermez. Tüm satır sonlarını \n
ile değiştirmeniz gerekir.
Örneğin:
"ilk satır ikinci satır"
ile kaydedilebilir:
"ilk satır\ikinci satır"
Not:
Python` için bu şu şekilde yazılmalıdır:
"ilk satır"ikinci satır"
burada \\
ters eğik çizgiden kaçmak içindir, aksi takdirde python \n
olarak
kontrol karakteri "yeni satır"
Bunu küçük bir Node.js projesi için yapmak zorunda kaldım ve bu work-around'u buldum:
{
"modify_head": [
"<script type='text/javascript'>",
"<!--",
" function drawSomeText(id) {",
" var pjs = Processing.getInstanceById(id);",
" var text = document.getElementById('inputtext').value;",
" pjs.drawText(text);}",
"-->",
"</script>"
],
"modify_body": [
"<input type='text' id='inputtext'></input>",
"<button onclick=drawSomeText('ExampleCanvas')></button>"
],
}
Bu bana oldukça düzgün görünüyor, bunun dışında her yerde çift tırnak kullanmak zorundayım. Aksi halde, belki YAML kullanabilirdim, ancak bunun başka tuzakları var ve yerel olarak desteklenmiyor. Ayrıştırıldıktan sonra, her dizeden sonra bir satır sonu isteyip istemediğime bağlı olarak sadece myData.modify_head.join('\n')
veya myData.modify_head.join()
kullanıyorum.
Bu gerçekten eski bir soru, ancak bir aramada buna rastladım ve sanırım sorununuzun kaynağını biliyorum.
JSON, verilerinde "real" yeni satırlara izin vermez; yalnızca kaçan yeni satırlara sahip olabilir. YOU]2 adresinden cevap bölümüne bakın. Soruya göre, Python'da satır sonlarından iki şekilde kaçmaya çalışmışsınız gibi görünüyor: satır devam karakterini ("\"
) kullanarak veya bir kaçış olarak "\n"
kullanarak.
Ancak unutmayın: python'da bir dizge kullanıyorsanız, özel kaçış karakterleri ("\t"
, "\n"
) GERÇEK kontrol karakterlerine çevrilir! "\n"`, satırsonu karakterini temsil eden ASCII kontrol karakteri ile değiştirilecektir, bu da tam olarak JSON'da yasadışı olan karakterdir. (Satır devam karakterine gelince, sadece yeni satırı çıkarır).
Yani yapmanız gereken şey Python'un karakterlerden kaçmasını engellemektir. Bunu ham bir karakter dizisi kullanarak (r"abc\ndef"
gibi karakter dizisinin önüne r
koyarak veya satırsonunun önüne fazladan bir eğik çizgi ekleyerek ("abc\\ndef"
) yapabilirsiniz.
Yukarıdakilerin her ikisi de, "\n"
karakterini gerçek satırsonu ASCII kontrol karakteriyle değiştirmek yerine, "\n"
karakterini iki değişmez karakter olarak bırakır ve JSON bunu satırsonu kaçışı olarak yorumlayabilir.