是否有可能在JSON中有多行字符串?
这主要是为了视觉上的舒适,所以我想我可以在编辑器中打开自动换行,但我只是有点好奇。
我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的JSON模块,无论我使用\或\n作为转义,我都会得到很多错误。
是否有可能在JSON中有多行字符串?
这主要是为了视觉上的舒适,所以我想我可以在编辑器中打开自动换行,但我只是有点好奇。
我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的JSON模块,无论我使用\或\n作为转义,我都会得到很多错误。
当前回答
将属性值写入字符串数组。比如这里给出的例子https://gun.io/blog/multi-line-strings-in-json/。这将有所帮助。
我们总是可以使用数组的字符串多行字符串,如下所示。
{
"singleLine": "Some singleline String",
"multiline": ["Line one", "line Two", "Line Three"]
}
我们可以很容易地迭代数组以多行方式显示内容。
其他回答
这是一个非常老的问题,但当我想提高使用复杂条件表达式的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)将非常有用。
我注意到在一个重复的问题中张贴了同样的想法,但我想分享更多的信息。
我曾经在一个小型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>"
],
}
一旦解析,我只使用myData.modify_head.join('\n')或myData.modify_head.join(),这取决于我是否想在每个字符串后换行。
这看起来很整洁,除了我必须在所有地方使用双引号。尽管在其他情况下,我也许可以使用YAML,但它有其他缺陷,并且本机不支持。
如果只是为了在编辑器中显示,你可以使用'代替'或'
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文件(例如:语言翻译,你想和超过1线只有一个关键输出在客户机上)可以添加一些特殊字符您所选择的PS:允许通过JSON文件\ \新行之前和使用一些JS解析文本…如:
例子:
文件(text.json)
{"text": "一些JSON文本。\\下一行JSON文本"}
import text from 'text.json'
{text.split('\\')
.map(line => {
return (
<div>
{line}
<br />
</div>
);
})}}
虽然不是标准的,但我发现一些JSON库有支持多行字符串的选项。我是带着警告说的,这将损害您的互操作性。
然而,在我遇到的特定场景中,我需要使一个只被一个系统使用的配置文件可被人类阅读和管理。最终选择了这个解决方案。
下面是如何在Java上使用Jackson实现的:
JsonMapper mapper = JsonMapper.builder()
.enable(JsonReadFeature.ALLOW_UNESCAPED_CONTROL_CHARS)
.build()