Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RAILS JSON在字符串中保留反斜杠_Json_Ruby_Ruby On Rails 4 - Fatal编程技术网

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

RAILS JSON在字符串中保留反斜杠,json,ruby,ruby-on-rails-4,Json,Ruby,Ruby On Rails 4,我的视图表单中有以下行: <%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+") %> 这不是我真正想要的我的问题是如何在保存到数据库后保留反斜杠 这正是我想要的:“模式”:[“+\.runsheet\…+”] 我尝试过:,结果是:“模式”:[\”+\。运行表\\..+\”] 更新1 以下是html输出: <input

我的视图表单中有以下行:

<%= hidden_field_tag "ng_b2b_configuration[value][endpoints][][patterns][]", raw(".+\\\\.runsheet\\\\..+") %>
这不是我真正想要的我的问题是如何在保存到数据库后保留反斜杠

这正是我想要的:
“模式”:[“+\.runsheet\…+”]

我尝试过:
,结果是:
“模式”:[\”+\。运行表\\..+\”]

更新1

以下是html输出:

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

value=“.+\.runsheet\..+”
在HTML中最终将在Ruby中显示为
'.+\.runsheet\..+”
,因此您在某些地方感到困惑。你所做的任何事情(如果不耍花招)都不会给你一个字符串,比如:

".+\.runsheet\..+"
在Ruby或JSON中。反斜杠在Ruby双引号字符串和JSON格式字符串中都有特殊意义。两者都不需要反斜杠来转义
,因此都不会将其放在那里。但是由于在Ruby双引号字符串和JSON中,
\
作为转义字符具有特殊意义,因此单个
\
看起来像
\
,因为两者都必须通过转义转义字符来转义
\
的特殊含义

进入
irb
并说:

puts ".+\.runsheet\..+"
看看你能得到什么。然后说:

puts ".+\\.runsheet\\..+"
看看你能得到什么。第一个将为您提供:

.+.runsheet..+
第二点:

.+\.runsheet\..+

然后,您可以抛出一些
to_json
调用(再次使用
put
查看结果,以避免
inspect
将使用的转义),您将看到类似的情况发生。

但是Ruby(即ERB)中的
“+\.runsheet\…+”
这只是一种复杂的表达方式,
。+.runsheet.+”
,那么你看到的结果是怎样的呢?在HTML中包含
的外观以及日志中显示的
参数可能会有所帮助。在一个双引号的Ruby字符串中,
\\。
一个反斜杠,后跟一个句点。@muistooshort-ops-sorry。我编辑了上面的问题。谢谢你的解释。现在了解了双反斜杠,它不是真正的反斜杠,它只是作为逃避的东西。也从这里获得了信息:
.+\.runsheet\..+