是否有可能在JSON中有多行字符串?
这主要是为了视觉上的舒适,所以我想我可以在编辑器中打开自动换行,但我只是有点好奇。
我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的JSON模块,无论我使用\或\n作为转义,我都会得到很多错误。
是否有可能在JSON中有多行字符串?
这主要是为了视觉上的舒适,所以我想我可以在编辑器中打开自动换行,但我只是有点好奇。
我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的JSON模块,无论我使用\或\n作为转义,我都会得到很多错误。
当前回答
这是一个非常老的问题,但我在搜索中发现了这个问题,我想我知道你问题的根源了。
JSON不允许在其数据中出现“真正的”换行符;它只能有换行符。请看来自@YOU的回答。根据问题,看起来您试图在Python中转义换行有两种方式:使用行延续字符(“\”)或使用“\n”作为转义符。
但请记住:如果你在python中使用字符串,特殊转义字符(“\t”,“\n”)将被转换为REAL控制字符!“\n”将被替换为表示换行符的ASCII控制字符,而换行符正是JSON中不合法的字符。(至于换行字符,它只是把换行符去掉。)
所以你需要做的是防止Python转义字符。你可以通过使用一个原始字符串(将r放在字符串前面,如r"abc\ndef",或者在换行符前包含一个额外的斜杠("abc\\ndef")来做到这一点。
上述两种方法都不会将“\n”替换为真正的换行ASCII控制字符,而是将“\n”保留为两个文字字符,然后JSON可以将其解释为换行转义。
其他回答
\n\r\n为我工作!!
\n表示单行换行,\n\r\n表示双行换行
虽然不是标准的,但我发现一些JSON库有支持多行字符串的选项。我是带着警告说的,这将损害您的互操作性。
然而,在我遇到的特定场景中,我需要使一个只被一个系统使用的配置文件可被人类阅读和管理。最终选择了这个解决方案。
下面是如何在Java上使用Jackson实现的:
JsonMapper mapper = JsonMapper.builder()
.enable(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS)
.build()
不幸的是,这里的许多答案都解决了如何在字符串数据中放入换行符的问题。问题是如何通过将字符串值拆分到多行代码中来使代码看起来更好。(即使是认识到这一点的答案也提供了假设人们可以自由改变数据表示的“解决方案”,而在许多情况下,人们并不是这样。)
更糟糕的是,没有好的答案。
在许多编程语言中,即使它们不显式地支持跨行分割字符串,您仍然可以使用字符串连接来获得所需的效果;只要编译器不是那么糟糕就可以了。
但是json不是一种编程语言;它只是一个数据表示。你不能告诉它去连接字符串。它的语法(相当小)也不包括任何在多行上表示字符串的工具。
除了设计某种类型的预处理器(就我个人而言,我不想有效地创造自己的语言来解决这个问题),这个问题没有一个通用的解决方案。如果可以更改数据格式,则可以替换字符串数组。否则,这就是json不是为人类可读性而设计的众多方面之一。
JSON不允许为了可读性而换行。
最好的办法是使用一个可以为您换行的IDE。
JSON不允许真正的换行。您需要将所有换行符替换为\n。
eg:
"first line
second line"
可以通过以下方式保存:
“一线/二线”
注意:
对于Python,这应该写成:
“一线、二线”
\\是用来转义反斜杠的,否则python会把\n当作 控制字符“new line”