我很困惑为什么会抛出错误:
s = <<JSON
{"s": "This is \"valid\" JSON"}
JSON
JSON.parse(s) # => JSON::ParserError: 757: unexpected token at '{"s": "This is "valid" JSON"}'
基于使用http://jsonlint.com我可以确认这是有效的JSON,那么这笔交易是什么?我觉得我可以在这里使用%q{}
并且事情会被正确地转义,但我真的宁愿在这里使用heredoc。
答案 0 :(得分:8)
事实证明,Ruby supports disabling interpolation in heredocs通过用单引号包围开头标识符,因此在上面的示例中,它看起来像这样:
s = <<'JSON'
{"s": "This is \"valid\" JSON"}
JSON
JSON.parse(s) # => {"s"=>"This is \"valid\" JSON"}