JSON中的多行string
我正在写一些JSON格式的数据文件,并希望有一些真正的长string值分割成多行。 使用python的JSON模块,我得到了很多错误,无论我使用\
或\n
作为转义。
是否有可能在JSON中有多行string? 这主要是为了视觉上的舒适,所以我想我可以在我的编辑器中打开文字,但我只是有点好奇。
JSON不允许真正的换行符。 您需要将所有换行符replace为\n
。
我必须做一个小的Node.js项目,并发现这个解决方法 :
{ "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,但是这有其他缺陷,并且不是本地支持的。 一旦parsing,我只是使用myData.modify_head.join('\n')
或myData.modify_head.join()
,这取决于我是否想在每个string之后换行。
检查规格 ! JSON语法的char生成可以采取以下值:
- any-Unicode-character-except-
"
– 或 –\
– 或 – 控制字符 -
\"
-
\\
-
\/
-
\b
-
\f
-
\n
-
\r
-
\t
-
\u
四hex数字
换行符是“控制字符”,所以,不,你的string中可能没有字面换行符。 但是,您可以使用\n
和\r
所需的任意组合对其进行编码。
这是一个非常古老的问题,但我在search中遇到了这个问题,我想我知道你的问题的根源。
JSON不允许在其数据中使用“真正的”换行符; 它只能逃过换行。 请参阅上面@YOU的答案。 根据这个问题,看起来你试图用两种方法逃避Python中的换行符:使用行连续符(“\”)或使用“\ n”作为转义符。
但请记住:如果您在Python中使用string,特殊转义字符(“\ t”,“\ n”)被转换为REAL控制字符! “\ n”将被replace为表示换行符的ASCII控制字符,这正是JSON中非法的字符。 (至于连续字符,只需要换行符。)
所以你需要做的是防止Python逃离angular色。 你可以使用一个原始string(把r
放在string的前面,如r"abc\ndef"
,或者在换行符( "abc\\ndef"
)前加一个额外的斜线。
以上两种方法都不会用真正的换行ASCII控制字符replace“\ n”,而是将两个文字字符“\ n”相加,然后JSON可以将其解释为换行符。
JSON不允许突破行的可读性。
你最好的select是使用一个可以换行的IDE。
将属性值作为string数组写入。 像这里给出的例子https://gun.io/blog/multi-line-strings-in-json/ 。 这将有所帮助。
我们总是可以像下面那样使用多行string的数组。
{ "singleLine": "Some singleline String", "multiline": ["Line one", "line Two", "Line Three"] }
我们可以很容易地迭代数组来显示多行的内容。
使用正则expression式用\\n
replace所有的\r\n
\\n
。
这在scala中为我工作。
val newstr = str.replace("\r\n", "\\n")
将每行换成引号,并用逗号结束,如下所示:
"content": [ "This is the first line", "this is second", "and so on" ]
{{名称}}
{{NAME1}}
my.opt.push({ '名称': '行1', 'NAME1': 'LINE2')
是否有可能在JSON中有多行string?
是。 我现在只需通过按F12,点击控制台并在屏幕底部input,就可以使用我的Firefox浏览器对其进行testing。
x={text:"hello\nworld"}
Object x刚刚从包含多行string的JSON格式string中创build。
console.log(x.text) hello world
会显示x,表明它包含一个多行string。
这两个testing表明,Firefox的Javascript解释器很乐意创build和使用多行string的JSON。
使用JSON.stringify
和JSON.parse
进行更多的testing表明,Javascript解释器可以将包含多行string的对象转换为JSON,并将其parsing为完全没有问题。
我过去曾经把莎士比亚的全部作品作为JSON对象的一个属性存储起来,然后通过互联网发送出去,没有损坏。
例
这是三行input的两行string
x={text:"expert\ s\nex\ change"}
我们可以显示对象
console.log(x)
给
Object { text: "experts\nexchange" }
或string
console.log(x.text)
给
experts exchange
string中行的结尾是使用\ n和多行input是在行尾使用\来实现的。
在实践中,你可能想要将你的行结束符与string中的行结束符同步,例如
x={text:"experts\n\ exchange"}
fieldval = rs.getString(rs.getMetaData().getColumnName(i)) .trim() .replace("\\", "/") .replace("\r\n", "\\n") .replace("''", "\\n") .replace("\"", "\\n");
用多行写记事本++中的任何文本,然后按ctl + a和ctl + j将它们排列在一行
在json文件中写入:
{ "key":"multi line copied from notepad++" }
把多行文本放在txt文件中,然后
var str = { text: cat('path_to_file/text.txt') }
(它的工作在mongoDB上)
您可以尝试在句子之间放置<div></div>
。