问题描述
我正在努力弄清楚如何在没有转义反斜杠的情况下用 ruby 编写 JSON 文件,我需要生成以下 JSON 内容,以便匹配 Apple 的 xctestplan 格式:
{
"key": "ClassName\/testSuperImportant()"
}
require 'json'
testname = "ClassName.testSuperImportant"
testplan = {
:key => testname.sub('.',"\\/") + "()"
}
puts JSON.pretty_generate(testplan)
{
"key": "ClassName\\/testSuperImportant()"
}
这些 "\/"
、'\/'
的任何变体都只会产生一个像这样的斜线:"ClassName/testSuperImportant()"
我没有太多的 ruby 经验,所以我确信必须有一种聪明或简单的方法来做到这一点。它不必在 JSON stringer 中完成,它可以通过之后修改字符串来完成,但到目前为止 puts
和 print
保留了我不想要的双重或非转义结果。
感谢任何帮助,非常感谢。
解决方法
出于某种奇怪的原因,JSON 允许对斜杠进行转义,即使它不是保留字符。但实际上没有必要对它进行转义,因为正如我所写的,它不是一个保留字符。
所以,你可以这样做
require 'json'
testname = 'ClassName.testSuperImportant'
testplan = {
key: testname.sub('.','/') + '()'
}
puts JSON.pretty_generate(testplan)
# {
# "key": "ClassName/testSuperImportant()"
# }
这实际上与您的文档相同,只是具有不同的表示形式。