Techioz Blog

JavaScript JSON.parse のために Ruby ハッシュを JSON に適切にエスケープするにはどうすればよいですか?

概要

JavaScript JSON.parseで解析できるJSON文字列にRubyハッシュを埋め込もうとしています。

逃げる問題があります。

ルビィ:

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

ハムル

: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>

解決策

はい、奇妙な動作ですが、次のようにこの目的のためにいつでも DOM を使用できます

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

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

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