该字符串的类型是啥以及如何将其转换为哈希?
Posted
技术标签:
【中文标题】该字符串的类型是啥以及如何将其转换为哈希?【英文标题】:What is the type of this string and how to convert it to hash?该字符串的类型是什么以及如何将其转换为哈希? 【发布时间】:2021-11-11 15:25:28 【问题描述】:我将 ransack 参数从一个页面传递到另一个页面。最初的 params 看起来像 hash
"processed_at_gteq_datetime"=>"2021-08-01", "processed_at_lteq_datetime"=>"2021-09-14", "status_eq"=>"processed"
但是这个参数发送到另一个页面后,它变成了一个字符串,并采用以下类型:
"\"processed_at_gteq_datetime\"=>\"2021-08-01\", \"processed_at_lteq_datetime\"=>\"2021-09-14\", \"status_eq\"=>\"processed\""
在这种形式下,我无法使用它们进行搜索。
我如何转换这个字符串:
"\"processed_at_gteq_datetime\"=>\"2021-08-01\", \"processed_at_lteq_datetime\"=>\"2021-09-14\", \"status_eq\"=>\"processed\""
散列?
我试过了
JSON.parse my_params
但它不适用于此字符串
JSON::ParserError Exception: 767: unexpected token at '"processed_at_gteq_datetime"=>"2021-08-01", "processed_at_lteq_datetime"=>"2021-09-14", "status_eq"=>"processed"'
【问题讨论】:
您是如何“将这些参数发送到另一个页面”的? 解决这个问题的正确方法不是尝试解析 Ruby 代码,而是首先找出数据被破坏的原因。# 【参考方案1】:我猜你正在使用链接或重定向在页面之间传递参数。
如果你想保留这些参数,你必须将它们传递给路径助手:
link_to other_page_path(ransack_hash)
# => /other_page?processed_at_gteq_datetime=2021-08-01&processed_at_lteq_datetime=2021-09-14&status_eq=processed
和类似的结构。这个
link_to other_page_path(q: ransack_hash)
# => /other_page?q[processed_at_gteq_datetime]=2021-08-01&q[processed_at_lteq_datetime]=2021-09-14&q[status_eq]=processed
将嵌套参数,以便您可以在另一个控制器中检索
ransack_params = params[:q]
【讨论】:
【参考方案2】:这不起作用的原因:
JSON.parse("\"foo\"=>\"bar\"")
是因为它不是有效的 Json。对于有效的 JSON,您需要将 ruby =>
运算符替换为 javascript :
运算符。您可以通过 ruby 字符串操作来做到这一点。
string = "\"foo\"=>\"bar\""
json = string.gsub(/=>/,':')
JSON.parse(json)
【讨论】:
这会中断,例如,string = '"foo"=>"this is an arrow => that is part of the data, not the structure"'
以上是关于该字符串的类型是啥以及如何将其转换为哈希?的主要内容,如果未能解决你的问题,请参考以下文章