YOU*_*YOU 372
JSON不允许真正的换行符.您需要替换所有换行符\n.
例如:
"first line
second line"
可以保存:
"first line\nsecond line"
注意:
因为Python,这应写成:
"first line\\nsecond line"
在哪里\\用于转义反斜杠,否则python会将\n控件作为"新行"
err*_*per 191
我必须为一个小的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>"
],
}
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来很整洁,因为我必须到处使用双引号.虽然不然,但我可能会使用YAML,但这有其他陷阱而且本身不支持.一旦解析,我只是使用myData.modify_head.join('\n')或myData.modify_head.join(),取决于我是否想要在每个字符串之后换行.
Lig*_*ica 101
查看规格!JSON语法的char生成可以采用以下值:
"-or- \-or-control-character\"\\\/\b\f\n\r\t\u 四十六进制数字换行符是"控制字符",所以不,你的字符串中可能没有文字换行符.然而,你可以使用任何的组合进行编码,\n并且\r您需要.
Mar*_*ger 67
不幸的是,这里的许多答案都解决了如何在字符串数据中添加换行符的问题.问题是如何通过在多行代码中分割字符串值来使代码看起来更好.(甚至认识到这一点的答案也提供了"解决方案",假设一个人可以自由地改变数据表示,在许多情况下,人们不会这样做.)
更糟糕的是,没有好的答案.
在许多编程语言中,即使它们没有明确支持跨行分割字符串,您仍然可以使用字符串连接来获得所需的效果; 只要编译器不是很糟糕,这很好.
但是json不是一种编程语言; 它只是一个数据表示.你不能告诉它连接字符串.它的(相当小的)语法也不包括用于在多行上表示字符串的任何工具.
没有设计某种类型的预处理器(而且,对于其中一种,我觉得不能有效地编写我自己的语言来解决这个问题),这个问题没有一般解决方案.如果您可以更改数据格式,则可以替换字符串数组.否则,这是json不是为人类可读性而设计的众多方法之一.
Jam*_*tes 40
JSON不允许断行以提高可读性.
最好的办法是使用一个可以为你换行的IDE.
Har*_*wEm 39
这是一个非常古老的问题,但我在搜索时遇到了这个问题,我想我知道问题的根源.
JSON不允许在其数据中使用"真正的"换行符; 它只能逃脱换行.查看答案从@YOU.根据这个问题,看起来你试图以两种方式逃避Python中的换行符:使用行继续符("\"或)"\n"作为转义.
但请记住:如果你在python中使用字符串,特殊的转义字符("\t","\n")将被转换为REAL控制字符!该"\n"会代表一个换行符,而这恰恰是在JSON非法字符的ASCII控制字符替换.(至于续行字符,它只需要换行.)
所以你需要做的是防止Python转义字符.您可以通过使用原始字符串(放在字符串r前面,如在中r"abc\ndef",或在换行符前面包含一个额外的斜杠("abc\\ndef"))来完成此操作.
以上两种方法都不会替换"\n"为真正的换行符ASCII控制字符,而是留下"\n"两个文字字符,然后JSON可以将其解释为换行符.
Iva*_*van 13
是否可以在JSON中使用多行字符串?
是.我刚刚使用我的Firefox网络浏览器测试了这一点,按F12,点击控制台并在屏幕底部输入.
x={text:"hello\nworld"}
Run Code Online (Sandbox Code Playgroud)
对象x刚刚从包含多行字符串的JSON格式字符串创建.
console.log(x.text)
hello
world
Run Code Online (Sandbox Code Playgroud)
显示x.text,显示它是一个多行字符串.
这两个测试表明,Firefox的Javascript解释器很乐意使用多行字符串创建和使用JSON.
使用JSON.stringify和JSON.parse显示Javascript解释器的更多测试可以将包含多行字符串的对象转换为JSON并再次解析它而没有任何问题.
我过去将莎士比亚的全部作品存储为JSON对象中的属性,然后通过互联网发送,没有损坏.
这是通过三行输入的两行字符串
x={text:"expert\
s\nex\
change"}
Run Code Online (Sandbox Code Playgroud)
我们可以显示对象
console.log(x)
Run Code Online (Sandbox Code Playgroud)
给
Object { text: "experts\nexchange" }
Run Code Online (Sandbox Code Playgroud)
或者字符串
console.log(x.text)
Run Code Online (Sandbox Code Playgroud)
给
experts
exchange
Run Code Online (Sandbox Code Playgroud)
字符串中的行结束来自使用\n,并且在行的末尾仅使用\来实现多个输入行.
实际上,您可能希望将行结尾与字符串中的行结尾同步,例如
x={text:"experts\n\
exchange"}
Run Code Online (Sandbox Code Playgroud)
console.log("Hello\nWorld".length)
11
console.log("Hello World".length)
11
Run Code Online (Sandbox Code Playgroud)
请注意,带换行符的字符串不长于带空格的字符串.即使键盘上键入了两个字符('\'和'n'),字符串中也只存储一个字符.
San*_*mal 12
将属性值写为字符串数组.就像这里给出的例子一样https://gun.io/blog/multi-line-strings-in-json/.这会有所帮助.
我们总是可以为多行字符串使用字符串数组,如下所示.
{
"singleLine": "Some singleline String",
"multiline": ["Line one", "line Two", "Line Three"]
}
Run Code Online (Sandbox Code Playgroud)
我们可以轻松地迭代数组以多行方式显示内容.
使用表达式替换所有出现的\r\n用\\n.
这在scala中对我有用.
val newstr = str.replace("\r\n", "\\n")
Run Code Online (Sandbox Code Playgroud)
小智 7
使用json5(加载程序),请参阅https://json5.org/-示例(由json5)
{
lineBreaks: "Look, Mom! \
No \\n's!",
}
Run Code Online (Sandbox Code Playgroud)
这是一个非常古老的问题,但当我想提高使用复杂条件表达式的 Vega JSON 规范代码的可读性时,我也遇到了同样的问题。代码是这样的。
正如这个答案所说,JSON 不是为人类设计的。我知道这是一个历史决定,对于数据交换目的来说是有意义的。然而,在这种情况下,JSON 仍然被用作源代码。所以我要求我们的工程师使用Hjson作为源代码,并将其处理为JSON。
例如,在Windows环境下的Git中,您可以下载Hjson cli二进制文件并将其放在git/bin目录中使用。然后,将 Hjson 源转换(转译)为 JSON。使用 Make 等自动化工具生成 JSON 将很有用。
$ which hjson
/c/Program Files/git/bin/hjson
$ cat example.hjson
{
md:
'''
First line.
Second line.
This line is indented by two spaces.
'''
}
$ hjson -j example.hjson > example.json
$ cat example.json
{
"md": "First line.\nSecond line.\n This line is indented by two spaces."
}
Run Code Online (Sandbox Code Playgroud)
如果在编程语言中使用转换后的 JSON,特定于语言的库(如hjson-js)将很有用。
我注意到在重复的问题中发布了相同的想法,但我会分享更多信息。
| 归档时间: |
|
| 查看次数: |
558143 次 |
| 最近记录: |