如何用Ruby编写无多余转义的JSON文件以适配Apple xctestplan格式
问题原因
Ruby标准JSON库默认存在两个行为,共同导致了你遇到的问题:
- 不会主动转义正斜杠
/,所以直接生成JSON时只会输出普通斜杠 - 会自动转义字符串中的反斜杠,所以你提前在字符串中加入的
\会被转义成\\,最终出现双重转义的\\/效果
解决方案
方案1:使用JSON库自带的转义斜杠参数(推荐)
Ruby的json gem原生支持escape_slash参数,开启后会自动将所有正斜杠转义为\/格式,你不需要手动处理反斜杠,直接把.替换为普通/即可:
require 'json' testname = "ClassName.testSuperImportant" testplan = { :key => testname.sub('.', "/") + "()" } # 传入escape_slash参数开启正斜杠转义 puts JSON.pretty_generate(testplan, escape_slash: true)
运行后直接输出符合要求的结果:
{ "key": "ClassName\/testSuperImportant()" }
方案2:生成JSON后全局替换
如果因为环境限制无法使用上述参数,可以先生成普通JSON字符串,再全局替换正斜杠:
require 'json' testname = "ClassName.testSuperImportant" testplan = { :key => testname.sub('.', "/") + "()" } json_str = JSON.pretty_generate(testplan) # 把所有普通斜杠替换为转义后的格式 puts json_str.gsub('/', '\/')
输出效果和方案1完全一致。
内容的提问来源于stack exchange,提问作者Tristian
相关产品推荐
相关产品推荐

