该字符串的类型是啥以及如何将其转换为哈希?

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"'

以上是关于该字符串的类型是啥以及如何将其转换为哈希?的主要内容,如果未能解决你的问题,请参考以下文章

在 Powershell 中将字符串转换为哈希表

如何最好地将字符串表示形式转换为 DbType?

如何将 DateTime .NET 数据类型转换为 W3C XML DateTime 数据类型字符串并返回?

如何将哈希码对象值转换为字符串变量

将小型 Oracle 长原始值转换为其他类型

python中JSON对象的类型是啥?