我正在写一些JSON格式的数据文件,想把一些非常长的字符串值分割成多行。使用python的JSON模块,无论我使用还是
n`作为转义,都会出现一大堆错误。
有可能在JSON中使用多行字符串吗?这主要是为了视觉上的舒适,所以我想我可以在我的编辑器中打开换行功能,但我只是有点好奇......
我不得不为一个小的Node.js项目做这件事,并找到了这个work-around。
{
"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>"
],
}
这对我来说是个很好的办法,除了我必须在所有地方使用双引号。虽然我可以使用YAML,但它有其他缺陷,而且不支持原生。一旦解析完毕,我只需使用myData.modify_head.join('\n')
或myData.modify_head.join()
,这取决于我是否希望在每个字符串后有换行。
这真是一个老问题了,但我在搜索中发现了这个问题,我想我知道你问题的来源。
JSON不允许在其数据中出现 "真正的 "换行线;它只能有转义的换行线。见@YOU的答案。根据问题,看起来你试图在Python中以两种方式转义换行:通过使用续行字符("\")或使用
"\n "作为转义。
但是请记住:如果你在Python中使用字符串,特殊的转义字符("\t"
, "\n"
)会被翻译成真实的控制字符!"\n"
将被替换为代表换行符的ASCII控制字符,这正是JSON中的非法字符。(至于续行字符,它只是把换行符拿出来)。
所以你需要做的是防止Python对字符进行转义。你可以通过使用一个原始的字符串(在字符串前面加上r
,如r "abc\ndef"
,或者在换行符前面加上一个额外的斜线("abc\ndef"
)来实现。
以上两种方法都不是用真正的换行ASCII控制字符替换"n",而是将
"n "作为两个字面字符,然后JSON可以将其解释为换行符。