我有一个这种形式的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中构造哈希?
答案 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来实现。