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

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

我正在编写JSON格式的一些数据文件,并希望有一些非常长的字符串值分割在多行。使用python的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>"
 
 ],
}

一旦解析,我只使用myData.modify_head.join('\n')或myData.modify_head.join(),这取决于我是否想在每个字符串后换行。

这看起来很整洁,除了我必须在所有地方使用双引号。尽管在其他情况下,我也许可以使用YAML,但它有其他缺陷,并且本机不支持。

其他回答

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

eg:

"first line
second line"

可以通过以下方式保存:

“一线/二线”

注意:

对于Python,这应该写成:

“一线、二线”

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

我曾经在一个小型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,但它有其他缺陷,并且本机不支持。

我看到许多的答案可能不工作在大多数情况下,但可能是最简单的解决方案如果假设你想输出你写在一个JSON文件(例如:语言翻译,你想和超过1线只有一个关键输出在客户机上)可以添加一些特殊字符您所选择的PS:允许通过JSON文件\ \新行之前和使用一些JS解析文本…如:

例子:

文件(text.json)

{"text": "一些JSON文本。\\下一行JSON文本"}

import text from 'text.json'
{text.split('\\')
.map(line => {
return (
   <div>
     {line}
     <br />
   </div>
     );
})}}

将属性值写入字符串数组。比如这里给出的例子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`);

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

希望这回答了你的问题。