简体   繁体   English

如何将Ruby哈希值转换为带有未引用值的Javascript对象?

[英]How do you convert a Ruby hash to a Javascript object with unquoted values?

I want to output a Ruby hash as a JS object but for some values of the hash I need them without quotes, ie JS code. 我想输出一个Ruby哈希作为JS对象,但是对于哈希的某些值,我需要它们不带引号,即JS代码。 For example (something like) this Ruby: 例如(像这样的)Ruby:

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

Would output this JS: 将输出此JS:

{ foo: someJavascriptFn() }

Is something like this possible without patching proc or hash ? 如果不修补prochash是否有可能发生这种情况?

Yes, this is possible, but you'll need to build JSON yourself: 是的,这是可能的,但是您需要自己构建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!"}

Please note, that you might need to implement recursive call to this function if your input has nested structures. 请注意,如果您的输入具有嵌套结构,则可能需要对该函数进行递归调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM