如何从我的 Ruby on Rails API 解析这些散列转换为字符串,以便它可以作为 Javascript 中的对象进行访问?
Posted
技术标签:
【中文标题】如何从我的 Ruby on Rails API 解析这些散列转换为字符串,以便它可以作为 Javascript 中的对象进行访问?【英文标题】:How can I parse these hashes turned string, from my Ruby on Rails API so that it's accessible as an object in Javascript? 【发布时间】:2020-09-27 10:36:55 【问题描述】:数据以对象数组的形式存储在一个字符串中,如下所示
["\"x\"=>15, \"y\"=>7", "\"x\"=>14, \"y\"=>7", "\"x\"=>13, \"y\"=>7", "\"x\"=>13, \"y\"=>6", "\"x\"=>13, \"y\"=>5", "\"x\"=>13, \"y\"=>4", "\"x\"=>13, \"y\"=>3", "\"x\"=>12, \"y\"=>3", "\"x\"=>11, \"y\"=>3"]
以这种方式存储它的原因是,当我从 json 存储数据时,我必须将包装在动作参数中的内容转换为哈希。
我看了How to convert a ruby hash object to JSON?和Parse JSON in javascript?,我的回答没有解决。
首先,问题在于 JSON 似乎无法解析任何用双引号包裹的内容,也无法解析火箭哈希表示法,因此我无法将 ""x"=>15, "y"=>7"
转换为 "x"=>15, "y"=>7
。
也许,我必须序列化对象,看看我从哪里得到我的数据:How can I access the data for the snake object sent through JSON in my params?
对正确的方法有什么想法吗?
【问题讨论】:
这能回答你的问题吗? How do I convert a String object into a Hash object? @SebastianPalma,没有。我不想将我的字符串转换为哈希对象,而是转换为 JSON。 这就是给定答案的作用,您接受了它。 @SebastianPalma,你是对的。乍一看,我认为它解决了我的问题,但我需要更进一步。我写了自己的答案。 【参考方案1】:跟随radiantshaw的领导,使用任一
eval("\"x\"=>15, \"y\"=>7")
或
JSON.parse("\"x\"=>15, \"y\"=>7".gsub('=>', ':'))
我得到以下信息:"x"=>15, "y"=>7
,这是一个 Ruby 对象。但是为了将其转换为 Javascript 对象,我还需要将其转换为 json。
因此,通过更进一步,我可以将其解析为 json,如下所示:
将require 'json'
放入.rb 文件中,然后执行"x"=>15, "y"=>7.to_json
这将导致
"\"x\":15,\"y\":7"
.
【讨论】:
【参考方案2】:您无法转换为 JSON 的原因是哈希火箭不是正确的 JSON 语法。哈希火箭是纯粹的 Ruby 语法。
这意味着您以某种方式设法获取Hash
并将其转换为String
。所以转换后的字符串实际上是 Ruby 代码而不是 JSON。
你可以...
eval("\"x\"=>15, \"y\"=>7")
...它会返回一个 Ruby Hash
。
或者如果你出于安全原因不想使用eval
,你可以这样做......
JSON.parse("\"x\"=>15, \"y\"=>7".gsub('=>', ':'))
【讨论】:
以上是关于如何从我的 Ruby on Rails API 解析这些散列转换为字符串,以便它可以作为 Javascript 中的对象进行访问?的主要内容,如果未能解决你的问题,请参考以下文章
从 Ruby on Rails 应用程序向 Yahoo Web Search 提交搜索查询
如何注销 Facebook - 在 Rails 应用程序中使用代码(Ruby on Rails Omniauth)