如何从我的 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)

Ruby On Rails 和挑战 API

如何使用 Ruby on Rails 模拟 twitter api?

将字符串写入文件以供下载 Ruby on Rails

Ruby on rails:Google API dailyLimitExceededUnreg