多行字符串的 JSON 和模板文字

Posted

技术标签:

【中文标题】多行字符串的 JSON 和模板文字【英文标题】:JSON and Template Literals for multiline strings 【发布时间】:2017-02-14 11:57:20 【问题描述】:

我想在 JSON 文件中存储一些 sql 字符串。 这就是 JSON 文件在我的理想世界中的样子

[
  "select t.index1, t.title, t.description, t.insertDate
  from myTable t
  join anotherTable t2 on t.index1 = t2.fIndex
  where t2.active = 1",
  ...
]

明显的限制是 JSON 和 javascript 不支持多行字符串。

我想避免这样做:

[
  "select t.index1, t.title, t.description, t.insertDate\nfrom myTable t\njoin anotherTable t2 on t.index1 = t2.fIndex\nwhere t2.active = 1",
  ...
]    

我看到一个人这样做,这也不理想:

[
  ["select t.index1, t.title, t.description, t.insertDate",
  "from myTable t",
  "join anotherTable t2 on t.index1 = t2.fIndex",
  "where t2.active = 1"],
  ...
]

然后在他的解释器程序中,他使用了myMultilineStringInArrayForm.join("\n")

我想知道是否有人有任何关于模板字符串工作(或计划在未来工作)用于此目的的信息,如下所示:

[
  `select t.index1, t.title, t.description, t.insertDate
  from myTable t
  join anotherTable t2 on t.index1 = t2.fIndex
  where t2.active = 1`,
  ...
]

请注意,我在 ES6 的模板文字中使用了反引号 (`),显然变量的插值不适用于存储的 JSON,但我对此文字的多行特性感兴趣。

请注意,这个问题类似于这个 6 岁的问题:Multiline strings in JSON

我再次询问是因为我想知道 ` 语法是否已经计划好或从那时起已经开始工作了。

感谢您的帮助

【问题讨论】:

我也想避免使用 XML。如果在 JSON 中没有合乎逻辑的方法,那么我最后的选择可能是 XML,但在这个问题中,我只想探索 JSON 替代方案。 Multiline strings in JSON的可能重复 模板文字纯粹是 JavaScript 的一部分,而不是 JSON。 "我想在 JSON 文件中存储一些 sql 字符串。" - 做什么?为什么是 JSON? sql 字符串是从哪里来的,它们真的只是存储在那个文件中吗? 这确实是一个更复杂的模式,JSON 决定不是我的。它是一个以 JSON 格式存储其 ui 的框架,并且框架中的某些元素(网格等)具有 sql 语句来填充它们的行。当前的 sql 语句存储在 \n 中,并且在没有打开 IDE 的情况下很难编辑,而且 git 很难报告更改,因为查询中的一个小更改会导致整行显示更改。确实有多种原因,但这与问题本身无关,将多行字符串存储在 json 中,可能借助新技术,例如 tpl lits 【参考方案1】:

看起来我拥有可读存储格式的最佳选择是 XML。我试图远离 XML,并认为由于 ` 语法,JSON 在其未来具有多行字符串,但没有

【讨论】:

看起来 yaml 最适合这个。我会尝试说服我的团队改用 yaml。如果您有兴趣但不知道 yaml 是什么,请从这里开始:json2yaml.com 遇到了同样的问题,而 YAML 最终成为了完美的选择【参考方案2】:

您可以使用支持反引号的JSON6。

这似乎是一个小型的单人项目,所以也许更好的支持JSON5 通过转义换行符来支持跨越多行的字符串可能是一个更好的选择。

【讨论】:

我发现 YML 是一个更好的解决方案,我提出了这个想法并且它奏效了,所以现在我们将解析器更改为解析 YML 文件而不是 json 文件,并且我们不必修改旧文件因为yaml可以解析json就好了

以上是关于多行字符串的 JSON 和模板文字的主要内容,如果未能解决你的问题,请参考以下文章

ES6的多行字符串

C++ 多行字符串文字

如何在 js 字符串模板文字中调用带参数的函数? [关闭]

YAML中多行字符串的配置方法

多行 C# 插值字符串文字

ES6多行字符串+模板字符串