如何正确地将Ruby散列转义为JSON以用于javascript JSON.parse?

d7v8vwbk  于 2022-10-15  发布在  Ruby
关注(0)|答案(2)|浏览(140)

我正在尝试将ruby散列嵌入到json字符串中,该字符串可以由javascript JSON.parse进行解析。
我有逃跑的问题。

Ruby:

props = {sring: 'He said "hey"'}

HAML

:javascript
  const props = JSON.parse('#{props.to_json}');

它将呈现为

<script>
  const props = JSON.parse('{"sring":"He said \"hey\""}');
</script>

这将引发以下错误:

Uncaught SyntaxError: Expected ',' or '}' after property value in JSON at position 19
    at JSON.parse (<anonymous>)
    at (index):58:24

我体验过一些,JSON.parse可以解析以下字符串,但不确定如何从转义函数生成它:

<script>
  const props = JSON.parse('{"sring":"He said \\\"hey\\\""}');
</script>
vxbzzdmp

vxbzzdmp1#

是的,行为很奇怪,但您总是可以将DOM用于此目的,如下所示

- props = {string: 'He said "hey"'}

div[data-props=props.to_json id="props"]

javascript:
  const props = JSON.parse(document.getElementById("props").dataset.props)
ycl3bljg

ycl3bljg2#

调用Hash对象,而不是字符串对象

你误解了在哪里应用#to_json。您当前正在将其应用于一个字符串对象,而您应该序列化整个Hash。例如:

require 'json'

props = {string: 'He said "hey"'}.to_json
JSON.parse props

# => {"string"=>"He said \"hey\""}

换句话说,将您的Hash转换为JSON,而不是字符串。字符串本身不能正确地序列化到JavaScript对象表示法或从它序列化,它需要是键/值格式。

相关问题