2014-04-16 39 views
3

我很困惑,为什么这将引发一个错误:基于使用http://jsonlint.com我可以证实,这是有效的JSON,所以这是怎么回事解析有效的JSON引发错误

s = <<JSON 
{"s": "This is \"valid\" JSON"} 
JSON 

JSON.parse(s) # => JSON::ParserError: 757: unexpected token at '{"s": "This is "valid" JSON"}' 

?我感觉我可以在这里使用%q{},并且事情会被正确地转义,但我真的更愿意在这里使用heredoc。

回答

7

这是红宝石supports disabling interpolation in heredocs通过周围的单引号开幕标识的出现,所以在我上面的例子中,它应该是这样的:

s = <<'JSON' 
{"s": "This is \"valid\" JSON"} 
JSON 

JSON.parse(s) # => {"s"=>"This is \"valid\" JSON"}