RAILS JSON在字符串中保留反斜杠

时间:2016-12-22 01:37:14

标签: json ruby ruby-on-rails-4

我在视图中有这一行:

<%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+") %>

它会产生结果:

"patterns":[".+\\.runsheet\\..+"]

这不是我真正想要的那个。 我的问题是如何在我的数据库中保存后保留反斜杠?

这正是我想要的:"patterns":[".+\.runsheet\..+”]

我试过这个:<%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+"), class: "val_runsheet_all" %>和结果:"patterns":[\".+\\.runsheet\\..+\”]

更新1

这是html输出:

<input type="hidden" name="ng_b2b_configuration[value][endpoints][][patterns][]" id="ng_b2b_configuration_value_endpoints__patterns_" value=".+\.runsheet\..+">

1 个答案:

答案 0 :(得分:1)

HTML 中的

value=".+\.runsheet\..+"在Ruby中以'.+\.runsheet\..+'结尾,因此您在某处感到困惑。你做的任何事情(没有欺骗)都会给你一个字符串:

".+\.runsheet\..+"

在Ruby或JSON中。反斜杠在Ruby双引号字符串和JSON格式字符串中都有特殊含义。没有人需要反斜杠来逃避.,所以也不会把它放在那里。但是因为\在Ruby双引号字符串和JSON中具有特殊含义作为转义字符,所以单\看起来像\\,因为它们都必须逃避{{{1}的特殊均值。 1}},好吧,逃避转义字符。

进入\并说:

irb

看看你得到了什么。然后说:

puts ".+\.runsheet\..+"

看看你得到了什么。第一个会给你:

puts ".+\\.runsheet\\..+"

和第二个:

.+.runsheet..+

然后你可以进行一些.+\.runsheet\..+ 次调用(再次使用to_json查看结果,以便避免puts将使用的转义)并且您会看到类似的发生的事情。