是否有可能在JSON中有多行字符串?

这主要是为了视觉上的舒适,所以我想我可以在编辑器中打开自动换行,但我只是有点好奇。

我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的JSON模块,无论我使用\或\n作为转义,我都会得到很多错误。


当前回答

JSON不允许为了可读性而换行。

最好的办法是使用一个可以为您换行的IDE。

其他回答

查看规格!JSON语法的char生成可以取以下值:

any-Unicode-character-except——“或者——\ -or-control-character \” \ \ \/ \ b \ f \ n r \ \ t \ u four-hex-digits

换行符是“控制字符”,所以,不,你可以在你的字符串中没有文字换行符。然而,你可以使用你需要的\n和\r的任意组合来编码它。

JSON不允许真正的换行。您需要将所有换行符替换为\n。

eg:

"first line
second line"

可以通过以下方式保存:

“一线/二线”

注意:

对于Python,这应该写成:

“一线、二线”

\\是用来转义反斜杠的,否则python会把\n当作 控制字符“new line”

将属性值写入字符串数组。比如这里给出的例子https://gun.io/blog/multi-line-strings-in-json/。这将有所帮助。

我们总是可以使用数组的字符串多行字符串,如下所示。

{
    "singleLine": "Some singleline String",
    "multiline": ["Line one", "line Two", "Line Three"]
} 

我们可以很容易地迭代数组以多行方式显示内容。

如果只是为了在编辑器中显示,你可以使用'代替'或'

const obj = {
myMultiLineString: `This is written in a \
multiline way. \
The backside of it is that you \
can't use indentation on every new \
line because is would be included in \
your string. \
The backslash after each line escapes the carriage return. 
`
}

例子:

console.log(`First line \
Second line`);

将放在控制台: 一线二线

console.log(`First line 
second line`);

将放在控制台: 第一行 第二行

希望这回答了你的问题。

虽然不是标准的,但我发现一些JSON库有支持多行字符串的选项。我是带着警告说的,这将损害您的互操作性。

然而,在我遇到的特定场景中,我需要使一个只被一个系统使用的配置文件可被人类阅读和管理。最终选择了这个解决方案。

下面是如何在Java上使用Jackson实现的:

JsonMapper mapper = JsonMapper.builder()
   .enable(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS)
   .build()