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

JSON值是否可以包含多行字符串,json,multiline,Json,Multiline,我正在编写一个JSON文件,该文件将由Java程序读取。片段如下 { "testCases" : { "case.1" : { "scenario" : "this the case 1.", "result" : "this is a very long line which is not easily readble. so i would like to write it in multiple lines

我正在编写一个JSON文件,该文件将由Java程序读取。片段如下

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble.
                  so i would like to write it in multiple lines.
                  but, i do NOT require any new lines in the output.
                  I need to split the string value in this input file only.
                  such that I don't require to slide the horizontal scroll again and again while verifying the correctness of the statements.
                  the prev line, I have shown, without splitting just to give a feel of my problem"
    }
  }
}
根据,JSON语法的字符生成可以采用以下值:

  • 除-
    -或-
    \
    -或控制字符以外的任何Unicode字符
  • \”
  • \\
  • \/
  • \b
  • \f
  • \n
  • \r
  • \t
  • \u
    四个十六进制数字
换行符是“控制字符”,所以不,字符串中可能没有文字换行符。但是,您可以使用所需的
\n
\r
的任何组合对其进行编码

该工具确认您的JSON无效



而且,如果您想在JSON语法中编写换行符,而不在数据中实际包含换行符,那么您的运气就更糟了。虽然JSON在某种程度上是人性化的,但它仍然是数据,您试图对该数据应用任意格式。这绝对不是JSON的含义。

我可以理解,问题不是如何使用
JSON
传递带有控制符号的字符串,而是如何在文件中存储和恢复JSON,在文件中可以使用编辑器控制符号拆分字符串

如果要在文件中存储多行字符串,则文件将不会存储有效的
json
对象。但是,如果您仅在程序中使用
json
文件,则可以根据需要存储数据,并在每次将其加载到程序时手动删除文件中的所有换行符,然后传递给json解析器


或者,或者,哪一个更好,您可以使用
json
数据源文件,在其中您可以根据需要编辑一个sting,然后使用一些实用程序删除所有新的行,以将其添加到您的程序将使用的有效
json
文件中。

我不确定您的确切要求,但提高“可读性”的一个可能解决方案是将其存储为数组

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : ["this is a very long line which is not easily readble.",
                  "so i would like to write it in multiple lines.",
                  "but, i do NOT require any new lines in the output."]
    }
  }
}

}
需要时,可以使用重新连接

result.join(" ")

不是很好的解决方案,但你可以试试。它允许您在编辑器中编写多行文本,然后将其转换为正确的有效JSON格式


注意:它为新行添加了“\n”字符,但您可以使用“全部替换…”功能在任何文本编辑器中删除它们。

我相信这取决于您使用的json解释器。。。在纯javascript中,可以使用行终止符

{
  "testCases" :
  {
    "case.1" :
    {
      "scenario" : "this the case 1.",
      "result" : "this is a very long line which is not easily readble. \
                  so i would like to write it in multiple lines. \
                  but, i do NOT require any new lines in the output."
    }
  }
}

可能的重复我认为这更多是关于序列化JSON文件的可读性,而不是加载数据中的换行符(因此,不是的重复)。更像是使用JSON作为配置文件,其中有一个长字符串,为了可读性,如果有人通过文本编辑器对字符串进行编辑,硬包装字符串会很有帮助。@zashu:大多数文本编辑器都有软包装功能。这比一些硬编码的线宽更有用。@LightnessRacesinOrbit在具有如此长的行的文件上运行git Diff(或解决合并冲突)也是一件痛苦的事。这是JSON中多行字符串的重复,引用OP的问题:“JSON中是否可以有多行字符串?这主要是为了视觉上的舒适,所以我想我可以在我的编辑器中打开Word包,但是我只是好奇而已……“这是非语义的。这是一个抽象的漏洞。我会考虑用这种方式指定的数据格式基本上是坏的。我无法想象这样设计API或JSON文档只是为了增加字符串可读性。(只是出于调试的原因,我猜):……“我会考虑以这种方式指定的数据格式,基本上是坏的。”考虑到这是一个测试用例。如果你想硬编码字符串,你可能需要一个属性文件。我个人不会存储“真实”。“在正常情况下,JSON中的数据。但是如果这是一种从无测试到测试的简单方法,那么就使用它。@事实上,它可以用来将JSON文件存储到CVS中,其中增量的单位是行。这是正确的,但缩进空格将输出:
a\c
=>
a c
。JavaScript没有“JSON解释器“这是可以接受的。它只能接受字符串中的JSON。没错,如果您在字符串文本中提供JSON,那么您可以采用这种方法,但这是一件不同寻常的事情。您是否将JSON与JavaScript中的实际对象声明相混淆?实际上这是一个好主意。版本控制Hjson,并根据需要将其传输到JSON。“虽然JSON在某种程度上是为了对人类友好,但它仍然是数据……”事实就是如此。或者说,“[JSON]很容易让人类读写。机器很容易解析和生成。”[emph mine]有人可能会认为这是一个很好的补充,但也有人可能会与Crockford(以及,natch,单独的JSON实现)争论。