2012-03-06 62 views
3

我有這種形式轉換JavaScript對象爲Ruby的哈希

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

的JavaScript對象有沒有辦法將其轉換爲一個紅寶石哈希?

我嘗試使用JSON.parse和JSON.load
他們都扔

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

是否有一個通用的解決方案或我應該使用正則表達式,然後構建在Ruby中的哈希?

+1

刪除[您老問題(http://stackoverflow.com /問題/ 9579673 /轉換,JavaScript的JSON樣對象 - 一 - 紅寶石哈希),並創建一個新的不改變的事實,你有什麼是不是** **有效的JSON。 – 2012-03-06 08:43:26

+2

@andrew我確實改變了它的一個JavaScript對象的問題,這就是我從服務器上得到的東西......你知道這個問題的答案嗎? – vireshas 2012-03-06 09:10:36

+0

@andrew我從來沒有使用JSON這個詞! – vireshas 2012-03-06 09:13:48

回答

0

Ruby 1.9的支持這種類似一個JavaScript對象的哈希

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

將其轉換成一個Ruby散列

eval(obj) 
+0

其實你可能需要有一個數字**不* *引用。至少這是即使在允許JSON(有更加嚴格的語法) – kirilloid 2012-03-06 10:27:53

+0

@kirilloid燁我會做它了,謝謝刮網站ü:)其實我得到這個js對象和我的刮板用Ruby編寫的! – vireshas 2012-03-06 10:31:27

+3

從隨機網站評估代碼時要小心! – 2015-07-24 22:20:20

1

這不是一個JSON。實際上,JSON與代碼不一樣,可以通過javascript解釋並評估爲對象。

JSON本身只允許靜態值(無parseInt函數)和任何鍵都應該被引用爲好。

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

使用正則表達式和這樣的事情是不好的。你最好只是正確地格式化JSON。

好吧,如果你不能夠修改輸入,你可以解決問題與以下regexpes這個特殊的輸入:

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

,但在輸入任何變化,你需要添加更多和更多的正則表達式。

一般來說,以此來詮釋,你需要...解釋的JavaScript的JavaScript。

這通過安裝一些JS引擎,像犀牛或V8並將其綁定到Ruby是可能的。

+0

JavaScript代碼我有什麼是不是我的控制:(我颳了一個網站.. – vireshas 2012-03-06 09:11:38

+0

我非常小心,不要使用單詞JSON,我有一個這樣的JavaScript對象..現在我該如何轉換它哈希?是他們的解決方案或shld我使用正則表達式? – vireshas 2012-03-06 09:13:04

+0

理想情況下,爲了解析這樣的代碼,你需要有完整的JavaScript解釋器,以評估任何輸入到對象,散列或有點(我不熟悉紅寶石)。 – kirilloid 2012-03-06 10:12:25

相關問題