我'm writing some data files in JSON format and would like to have some really long string values split over multiple lines. Using python'的JSON模块我得到了很多错误,无论我使用 \ 还是 \n 作为转义 .
\
\n
是否可以在JSON中使用多行字符串?它主要是为了视觉上的舒适,所以我想我可以在我的编辑器中翻开自动换行,但我只是有点好奇......
使用多重多行在记事本中写入任何文本,然后按ctl a和ctl j将它们排列在一行中
在json文件中写:
{ "key":"multi line copied from notepad++" }
将属性值写为字符串数组 . 就像这里给出的例子https://gun.io/blog/multi-line-strings-in-json/ . 这会有所帮助 .
我们总是可以为多行字符串使用字符串数组,如下所示 .
{ "singleLine": "Some singleline String", "multiline": ["Line one", "line Two", "Line Three"] }
我们可以轻松地迭代数组以多行方式显示内容 .
{{名称}}{}
my.opt.push({ '名称': '行1', 'NAME1': 'LINE2')
将多行文本放在txt文件上然后
var str = { text: cat('path_to_file/text.txt') }
(它在mongoDB上运行)
你可以简单地运行下面的代码,你需要在tilde ~ 字符之间的多行字符串:
~
var multiLineString = ` this is the multiline String `; JSON.stringify(multiLineString);
JSON不允许断行以提高可读性 .
最好的办法是使用一个可以为你换行的IDE .
只需包含段落标记,使其看起来整洁,高效 .
示例:“body”:“
这里的第1段 .
这里的第2段 .”
这是一个非常古老的问题,但我在搜索时遇到了这个问题,我想我知道问题的根源 .
JSON不允许在其数据中使用“真实”换行符;它只能逃脱换行 . 请参阅上面@YOU的答案 . 根据这个问题,看起来你试图以两种方式逃避Python中的换行:使用行继续符(“\”)或使用“\ n”作为转义 .
但请记住:如果你在python中使用一个字符串,特殊的转义字符(“\ t”,“\ n”)将转换为REAL控制字符! “\ n”将替换为表示换行符的ASCII控制字符,该字符恰好是JSON中非法的字符 . (至于续行字符,它只需要换行 . )
所以你需要做的是防止Python转义字符 . 您可以通过使用原始字符串(将 r 放在字符串前面,如 r"abc\ndef" ,或者在换行符前面添加一个额外的斜杠( "abc\\ndef" )来完成此操作 .
r
r"abc\ndef"
"abc\\ndef"
上述两种方法都不会将“\ n”替换为真正的换行符ASCII控制字符,而是将“\ n”作为两个文字字符,然后JSON可以将其解释为换行符 .
不幸的是,这里的许多答案都解决了如何在字符串数据中添加换行符的问题 . 问题是如何通过在多行代码中分割字符串值来使代码看起来更好 . (甚至认识到这一点的答案也提供了“解决方案”,假设一个人可以自由地改变数据表示,在许多情况下,人们不会这样做 . )
更糟糕的是,没有好的答案 .
在许多编程语言中,即使它们没有明确支持跨行分割字符串,您仍然可以使用字符串连接来获得所需的效果;只要编译器不是很糟糕,这很好 .
但是json不是一种编程语言;它只是一个数据表示 . 你不能告诉它连接字符串 . 它的(相当小的)语法也不包括用于在多行上表示字符串的任何工具 .
没有设计某种类型的预处理器(而且,对于一个人来说,不想有效地编写我自己的语言来解决这个问题),这个问题没有一般解决方案 . 如果您可以更改数据格式,则可以替换字符串数组 . 否则,这是json不是为人类可读性而设计的众多方法之一 .
看看the specification! JSON语法的char生成可以采用以下值:
any-Unicode-character-except- " -or- \ -or-control-character
"
\"
\\
\/
\b
\f
\r
\t
\u 四个十六进制数字
\u
换行符是"control characters"所以,不,你的字符串中可能没有文字换行符 . 但是,您可以使用 \n 和 \r 的任何组合对其进行编码 .
使用正则表达式将所有出现的 \r\n 替换为 \\n .
\r\n
\\n
这在scala中对我有用 .
val newstr = str.replace("\r\n", "\\n")
您可以尝试在句子之间放置 <div></div> .
<div></div>
Is it possible to have multi-line strings in JSON?
是 . 我刚刚使用我的Firefox网络浏览器测试了这个,按F12,点击控制台并在屏幕底部输入 .
x={text:"hello\nworld"}
对象x刚刚从包含多行字符串的JSON格式字符串创建 .
console.log(x.text) hello world
显示x.text,显示它是一个多行字符串 .
这两个测试表明Firefox的Javascript解释器很乐意使用多行字符串创建和使用JSON .
使用 JSON.stringify 和 JSON.parse 进行的更多测试表明Javascript解释器可以转换为包含多行字符串到JSON的对象,并再次解析它,完全没有问题 .
JSON.stringify
JSON.parse
我过去将莎士比亚的全部作品存储为JSON对象中的属性,然后通过互联网发送,没有损坏 .
这是通过三行输入的两行字符串
x={text:"expert\ s\nex\ change"}
我们可以显示对象
console.log(x)
给
Object { text: "experts\nexchange" }
或者字符串
console.log(x.text)
experts exchange
字符串中的行结束来自使用\ n,并且在行的末尾仅使用\来实现多个输入行 .
实际上,您可能希望将行结尾与字符串中的行结尾同步,例如
x={text:"experts\n\ exchange"}
console.log("Hello\nWorld".length) 11 console.log("Hello World".length) 11
请注意,带换行符的字符串不长于带空格的字符串 . 即使键盘上键入了两个字符(''和'n'),字符串中也只存储一个字符 .
使用json5(loader)参见https://json5.org/ - example(by json5)
{lineBreaks:“看,妈妈!\不,不!”,}
尝试使用 base64 编码的字符串值 . 大部分时间都为我工作 .
base64
在 base64 之后编码的字符串看起来像
{ "singleLine": "Some singleline String", "multiline": "TGluZSBvbmUKTGluZSBUd28KTGluZSBUaHJlZQ==" }
base64编码和解码适用于所有语言 .
fieldval = rs.getString(rs.getMetaData().getColumnName(i)) .trim() .replace("\\", "/") .replace("\r\n", "\\n") .replace("''", "\\n") .replace("\"", "\\n");
将每一行换成引号并以逗号结束,如下所示:
"content": [ "This is the first line", "this is second", "and so on" ]
JSON不允许真正的换行符 . 您需要使用 \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,但这有其他陷阱并且本身不受支持 . 解析后,我只使用 myData.modify_head.join('\n') 或 myData.modify_head.join() ,具体取决于我是否想要在每个字符串之后换行 .
myData.modify_head.join('\n')
myData.modify_head.join()
19 回答
使用多重多行在记事本中写入任何文本,然后按ctl a和ctl j将它们排列在一行中
在json文件中写:
将属性值写为字符串数组 . 就像这里给出的例子https://gun.io/blog/multi-line-strings-in-json/ . 这会有所帮助 .
我们总是可以为多行字符串使用字符串数组,如下所示 .
我们可以轻松地迭代数组以多行方式显示内容 .
{{名称}}
{}
my.opt.push({ '名称': '行1', 'NAME1': 'LINE2')
将多行文本放在txt文件上然后
(它在mongoDB上运行)
你可以简单地运行下面的代码,你需要在tilde
~
字符之间的多行字符串:JSON不允许断行以提高可读性 .
最好的办法是使用一个可以为你换行的IDE .
只需包含段落标记,使其看起来整洁,高效 .
示例:“body”:“
这里的第1段 .
这里的第2段 .
”
这是一个非常古老的问题,但我在搜索时遇到了这个问题,我想我知道问题的根源 .
JSON不允许在其数据中使用“真实”换行符;它只能逃脱换行 . 请参阅上面@YOU的答案 . 根据这个问题,看起来你试图以两种方式逃避Python中的换行:使用行继续符(“\”)或使用“\ n”作为转义 .
但请记住:如果你在python中使用一个字符串,特殊的转义字符(“\ t”,“\ n”)将转换为REAL控制字符! “\ n”将替换为表示换行符的ASCII控制字符,该字符恰好是JSON中非法的字符 . (至于续行字符,它只需要换行 . )
所以你需要做的是防止Python转义字符 . 您可以通过使用原始字符串(将
r
放在字符串前面,如r"abc\ndef"
,或者在换行符前面添加一个额外的斜杠("abc\\ndef"
)来完成此操作 .上述两种方法都不会将“\ n”替换为真正的换行符ASCII控制字符,而是将“\ n”作为两个文字字符,然后JSON可以将其解释为换行符 .
不幸的是,这里的许多答案都解决了如何在字符串数据中添加换行符的问题 . 问题是如何通过在多行代码中分割字符串值来使代码看起来更好 . (甚至认识到这一点的答案也提供了“解决方案”,假设一个人可以自由地改变数据表示,在许多情况下,人们不会这样做 . )
更糟糕的是,没有好的答案 .
在许多编程语言中,即使它们没有明确支持跨行分割字符串,您仍然可以使用字符串连接来获得所需的效果;只要编译器不是很糟糕,这很好 .
但是json不是一种编程语言;它只是一个数据表示 . 你不能告诉它连接字符串 . 它的(相当小的)语法也不包括用于在多行上表示字符串的任何工具 .
没有设计某种类型的预处理器(而且,对于一个人来说,不想有效地编写我自己的语言来解决这个问题),这个问题没有一般解决方案 . 如果您可以更改数据格式,则可以替换字符串数组 . 否则,这是json不是为人类可读性而设计的众多方法之一 .
看看the specification! JSON语法的char生成可以采用以下值:
any-Unicode-character-except-
"
-or-\
-or-control-character\"
\\
\/
\b
\f
\n
\r
\t
\u
四个十六进制数字换行符是"control characters"所以,不,你的字符串中可能没有文字换行符 . 但是,您可以使用
\n
和\r
的任何组合对其进行编码 .使用正则表达式将所有出现的
\r\n
替换为\\n
.这在scala中对我有用 .
您可以尝试在句子之间放置
<div></div>
.Is it possible to have multi-line strings in JSON?
是 . 我刚刚使用我的Firefox网络浏览器测试了这个,按F12,点击控制台并在屏幕底部输入 .
对象x刚刚从包含多行字符串的JSON格式字符串创建 .
显示x.text,显示它是一个多行字符串 .
这两个测试表明Firefox的Javascript解释器很乐意使用多行字符串创建和使用JSON .
使用
JSON.stringify
和JSON.parse
进行的更多测试表明Javascript解释器可以转换为包含多行字符串到JSON的对象,并再次解析它,完全没有问题 .我过去将莎士比亚的全部作品存储为JSON对象中的属性,然后通过互联网发送,没有损坏 .
示例
这是通过三行输入的两行字符串
我们可以显示对象
给
或者字符串
给
字符串中的行结束来自使用\ n,并且在行的末尾仅使用\来实现多个输入行 .
实际上,您可能希望将行结尾与字符串中的行结尾同步,例如
多行字符串长度
请注意,带换行符的字符串不长于带空格的字符串 . 即使键盘上键入了两个字符(''和'n'),字符串中也只存储一个字符 .
使用json5(loader)参见https://json5.org/ - example(by json5)
{lineBreaks:“看,妈妈!\不,不!”,}
尝试使用
base64
编码的字符串值 . 大部分时间都为我工作 .在
base64
之后编码的字符串看起来像base64编码和解码适用于所有语言 .
将每一行换成引号并以逗号结束,如下所示:
JSON不允许真正的换行符 . 您需要使用
\n
替换所有换行符 .我必须为一个小的Node.js项目做这个,并发现这个解决方法:
这对我来说看起来很整洁,因为我必须到处使用双引号 . 虽然不然,但我可能会使用YAML,但这有其他陷阱并且本身不受支持 . 解析后,我只使用
myData.modify_head.join('\n')
或myData.modify_head.join()
,具体取决于我是否想要在每个字符串之后换行 .