我已经在组合几个库进行编程,但遇到了一个问题:字符串被“双重转义”。
例如:修复后的示例
> x = ['a']
=> ["a"]
> x.to_s
=> "[\"a\"]"
>
然而,再次回到...
\"\[\\\"s\\\"\]\"
在处理http头时出现了这种情况。我有一个头部,它将是一个数组,但是http库正在对数组的to_s值进行自己的字符转义。
我找到的解决方法是自己将数组转换为字符串,然后“撤销”to_s。就像这样: formatted_value = value.to_s
if value.instance_of?(Array)
formatted_value = formatted_value.gsub(/\\/,"") #remove backslash
formatted_value = formatted_value.gsub(/"/,"") #remove single quote
formatted_value = formatted_value.gsub(/\[/,"") #remove [
formatted_value = formatted_value.gsub(/\]/,"") #remove ]
end
value = formatted_value
我需要一种更好的方法来解决这个问题...(而不需要猴子补丁正在使用的gems)。 (是的,如果我的字符串实际包含那些字符串,它会中断。)
有什么建议吗?
**更新2 **
好吧。 在这个领域仍然存在问题,但现在我认为我已经找到了核心问题。 它在调用to_s后将数组序列化为json。 至少,看起来它正在复制我所看到的。
['a'].to_s.to_json
我正在调用一个gem中的方法,该方法返回to_s的结果,然后我正在对其进行to_json调用。
x.to_s
导致了你展示的格式不是正常行为。为什么一个字符串会被转换成一个数组?你是否覆盖了一些你没有在这里告诉我们的东西? - jdlirb
中执行了你的示例,但完全没有得到你的结果(实际上并没有期望得到)。为什么字符串会自动转换为数组呢? - nzifnabx.to_s
没有你描述的行为,无论是在Ruby 1.8.7、Ruby 1.9.2还是JRuby中。 - Sébastien Le Callonnec