2016-12-29 35 views
0

我想輸出一個Ruby哈希值作爲JS對象,但是對於哈希值的某些值,我需要它們而不用引號,即JS代碼。例如(像)這樣紅寶石:如何將Ruby哈希轉換爲帶有非引用值的Javascript對象?

{ foo: proc { 'someJavascriptFn()' } }.to_json 

將輸出這個JS:

{ foo: someJavascriptFn() } 

是這樣的可能沒有修補prochash

+0

*「...作爲JS對象(或JSON)...」*不,不是JSON。該輸出是無效的JSON。 –

+0

固定,刪除json。 – jthomas

+0

如果你需要直接調用這個函數,你可以使用JS'eval()'。請注意並注意以下警告:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval – Allolex

回答

0

是的,這是可能的,但你需要自己構建JSON:

hash = { 
    foo: proc { 'someJavascriptFn()' }, 
    bar: 42, 
    baz: "Hello, world!" 
} 

content = hash.each_with_object([]) do |(k, v), acc| 
    acc << ("#{k}: " << (Proc === v ? v.() : v.inspect)) 
end.join(",\n") 
#⇒ "foo: someJavascriptFn(),\nbar: 42,\nbaz: \"Hello, world!\"" 
puts "{#{content}}" 
#⇒ {foo: someJavascriptFn(), 
# bar: 42, 
# baz: "Hello, world!"} 

請注意,您可能需要執行遞歸調用這個函數,如果你的輸入已經嵌套結構。

相關問題