【问题标题】:convert Javascript Object to a Ruby Hash将 Javascript 对象转换为 Ruby 哈希
【发布时间】:2012-03-06 08:16:36
【问题描述】:

我有一个这种形式的 javascript 对象

 obj = "[
   {
     title: "Sean Kingston1",
     duration: parseInt("71", 10),
   },
   {
     title: "Sean Kingston2",
     duration: parseInt("71", 10),
   },
 ]"

有没有办法将其转换为 ruby​​ 哈希?

我尝试使用 JSON.parse 和 JSON.load
他们俩都扔了

 JSON::ParserError: lexical error: invalid string in json text.
                               {   title: "Sean Kingston1
                 (right here) ------^

是否有通用解决方案或者我应该使用正则表达式然后在 ruby​​ 中构造哈希?

【问题讨论】:

  • 删除 your old question 并创建一个新的并不会改变您所拥有的是不是有效 JSON 的事实。
  • @andrew 我确实将问题更改为 javascript 对象,这就是我从服务器得到的...你知道这个问题的答案吗??
  • @andrew 我从来没有用过 JSON 这个词!
  • 当你把它标记为 JSON 时你做了。
  • 我的错,我没注意到!你觉得我应该在这里做什么?我可能会使用 reqex 并将所有标题和持续时间转换为“标题”和“持续时间”.. 有通用解决方案吗?

标签: javascript ruby


【解决方案1】:

这不是 JSON。实际上,JSON 和代码是不一样的,它可以被 javascript 解释并评估为对象。

JSON 本身只允许静态值(没有 parseInt)并且任何键也应该被引用。

[{
    "title": "Sean Kingston1",
    "duration": 71
 },
 {
    "title": "Sean Kingston2",
    "duration": 71
 }]

使用正则表达式之类的东西不好。您最好正确格式化 JSON。

好的,如果您无法修改该输入,您可以使用以下正则表达式解决此特定输入的问题:

/^\s*(\w+)\s*:/, '"\1":';
/:\s*parseInt\("(\d+)"\,\s*10)/, ': \1';

但是对于输入的任何变化,您都需要添加越来越多的正则表达式。

通常,为了解释 javascript,您需要...解释 javascript。

这可以通过安装一些 js 引擎(如 Rhino 或 V8)并将其绑定到 Ruby 来实现。

【讨论】:

  • 我所拥有的javascript代码不在我的控制之下:(我正在抓取一个网站..
  • 我非常小心不要使用 JSON 这个词,我有一个这种类型的 javascript 对象.. 现在我如何将它转换为哈希?他们是他们的解决方案还是我使用正则表达式??
  • 理想情况下,为了解析这样的代码,你需要有完整的 javascript 解释器来评估任何输入到对象、散列或其他方面(我不熟悉 Ruby)。
  • 我做了类似的事情,用数字替换了 parseInt("","") 并调用了 eval(obj) 它工作了:)
  • 嗯。您可以为 js 代码调用 eval 吗? eval 不是什么好东西,但在这里可以工作。
【解决方案2】:

ruby 1.9 支持这种类似于 javascript 对象的散列

 obj = "[
  {
   title: "Sean Kingston1",
   duration: "71",
  },
  {
   title: "Sean Kingston2",
   duration: "71",
  },
 ]"

将其转换为 ruby​​ 哈希

 eval(obj)

【讨论】:

猜你喜欢
  • 2017-04-04
  • 2011-06-29
  • 1970-01-01
  • 2020-09-15
  • 2011-03-12
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 2011-03-13
相关资源
最近更新 更多