多行字符串的 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 和模板文字的主要内容,如果未能解决你的问题,请参考以下文章