协慌网

登录 贡献 社区

JSON 中允许多行字符串吗?

JSON 中是否可以包含多行字符串?

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

我正在以 JSON 格式编写一些数据文件,并希望将一些很长的字符串值分成多行。使用 python 的 JSON 模块,无论使用\还是\n进行转义,我都会遇到很多错误。

答案

JSON不允许使用实际的换行符。您需要将所有换行符替换为\n

例如:

"first line second line"

可以保存为:

"first line\nsecond line"

笔记:

对于Python ,应这样写:

"first line\\nsecond line"

\\用于转义反斜杠,否则 python 将\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>"

 ],
}

这对我来说看起来很整洁,因为我必须在所有地方都使用双引号。尽管不是这样,我也许可以使用 YAML,但这有其他陷阱,并且本机不支持。解析后,我只是使用myData.modify_head.join('\n')myData.modify_head.join() ,具体取决于我是否要在每个字符串后换行。

不幸的是,这里的许多答案都解决了如何在字符串数据中放置换行符的问题。问题是如何通过将字符串值拆分为多行代码来使代码看起来更好。 (甚至认识到这一点的答案也提供了 “解决方案”,这些解决方案假定一个人可以自由更改数据表示形式,而在许多情况下则不能。)

更糟糕的消息是,没有好的答案。

在许多编程语言中,即使它们不显式支持跨行分割字符串,您仍然可以使用字符串串联来获得所需的效果;只要编译器不是很糟糕,就可以了。

但是 json 不是一种编程语言。这只是一个数据表示。您不能告诉它连接字符串。它的(相当小的)语法也不包含任何表示多行字符串的功能。

缺少设计某种预处理器的过程(而我,其中一个,我不希望自己有效地用自己的语言来解决这个问题),但是没有一个通用的解决方案可以解决这个问题。如果可以更改数据格式,则可以替换字符串数组。否则,这是 json 并非为人类可读性而设计的众多方式之一。