将Javascript对象转换为Ruby Hash

时间:2012-03-06 08:16:37

标签: javascript ruby

我有一个这种形式的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中构造哈希?

2 个答案:

答案 0 :(得分:3)

ruby​​ 1.9支持类似于javascript对象的哈希

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

将其转换为ruby哈希

 eval(obj)

答案 1 :(得分: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来实现。