是否有可能在JSON中有多行字符串?
这主要是为了视觉上的舒适,所以我想我可以在编辑器中打开自动换行,但我只是有点好奇。
我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的JSON模块,无论我使用\或\n作为转义,我都会得到很多错误。
是否有可能在JSON中有多行字符串?
这主要是为了视觉上的舒适,所以我想我可以在编辑器中打开自动换行,但我只是有点好奇。
我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的JSON模块,无论我使用\或\n作为转义,我都会得到很多错误。
当前回答
\n\r\n为我工作!!
\n表示单行换行,\n\r\n表示双行换行
其他回答
\n\r\n为我工作!!
\n表示单行换行,\n\r\n表示双行换行
假设这个问题与轻松编辑文本文件,然后手动将它们转换为json有关,我发现了两个解决方案:
hjson (that was mentioned in this previous answer), in which case you can convert your existing json file to hjson format by executing hjson source.json > target.hjson, edit in your favorite editor, and convert back to json hjson -j target.hjson > source.json. You can download the binary here or use the online conversion here. jsonnet, which does the same, but with a slightly different format (single and double quoted strings are simply allowed to span multiple lines). Conveniently, the homepage has editable input fields so you can simply insert your multiple line json/jsonnet files there and they will be converted online to standard json immediately. Note that jsonnet supports much more goodies for templating json files, so it may be useful to look into, depending on your needs.
这是一个非常老的问题,但当我想提高使用复杂条件表达式的Vega JSON规范代码的可读性时,我也有同样的问题。代码是这样的。
正如这个答案所说,JSON不是为人类设计的。我知道这是一个历史性的决定,它对数据交换的目的是有意义的。然而,JSON仍然被用作这种情况下的源代码。所以我要求我们的工程师使用Hjson作为源代码,并将其处理成JSON。
例如,在Git For Windows环境中, 你可以下载Hjson命令行的二进制文件,放在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."
}
如果要在编程语言中使用转换后的JSON,特定于语言的库(如hjson-js)将非常有用。
我注意到在一个重复的问题中张贴了同样的想法,但我想分享更多的信息。
这是一个非常老的问题,但我在搜索中发现了这个问题,我想我知道你问题的根源了。
JSON不允许在其数据中出现“真正的”换行符;它只能有换行符。请看来自@YOU的回答。根据问题,看起来您试图在Python中转义换行有两种方式:使用行延续字符(“\”)或使用“\n”作为转义符。
但请记住:如果你在python中使用字符串,特殊转义字符(“\t”,“\n”)将被转换为REAL控制字符!“\n”将被替换为表示换行符的ASCII控制字符,而换行符正是JSON中不合法的字符。(至于换行字符,它只是把换行符去掉。)
所以你需要做的是防止Python转义字符。你可以通过使用一个原始字符串(将r放在字符串前面,如r"abc\ndef",或者在换行符前包含一个额外的斜杠("abc\\ndef")来做到这一点。
上述两种方法都不会将“\n”替换为真正的换行ASCII控制字符,而是将“\n”保留为两个文字字符,然后JSON可以将其解释为换行转义。
将属性值写入字符串数组。比如这里给出的例子https://gun.io/blog/multi-line-strings-in-json/。这将有所帮助。
我们总是可以使用数组的字符串多行字符串,如下所示。
{
"singleLine": "Some singleline String",
"multiline": ["Line one", "line Two", "Line Three"]
}
我们可以很容易地迭代数组以多行方式显示内容。