单值上的to_json无法解析

时间:2013-08-23 10:00:09

标签: ruby activerecord sinatra wysihtml5

我正在尝试使用Activerecord在sinatra应用中实现wysihml5

富文本编辑器效果很好,当我提交表单时,我得到了正确的html帖子到控制器:

pry:> request.params
=> {"title" => "title text",
"content" => "<b>bold text</b><br><i>italic text</i>",
"_wysihtml5_mode" => 1
}

然后,我从request.params中删除哈希条目“_wysihtml5_mode”以创建数据库条目,然后我将内容转换为json:

pry:> request.params.delete("_wysihtml5_mode")
=> 1
pry:> request.params["content"].to_json
=> "\"\\u003Cb\\u003Ebold text\\u003C/b\\u003E...
pry:> class.create(request.params)

问题是我不能把我的价值重新开始:

pry:> class.last.content
=> "\"\\u003Cb\\u003Ebold text\\u003C/b\\u003E...
pry:> JSON.parse(class.last.content)
JSON::ParseError: 743: unexpected token at '"\\u003Cb\\u003Ebold text\\u003C/b\\u003E...

我怎么能把这个unicode字符恢复到他们的utf-8风格(我可能错了,我对字符表不满意)。似乎在转换为json期间,“在开头添加”:

                    "<b>bold => "\"\\u003Cb\\u003Ebold

这可能是问题所在?有什么想法吗?

1 个答案:

答案 0 :(得分:4)

问题来自于对单个值调用to_json。这不会产生完整的JSON表示。以下是一些例子:

"hello".to_json
=> "\"hello\""

JSON.parse("hello".to_json)
=> JSON::ParseError: 743: unexpected token at...

nil.to_json
=> "null"

JSON.parse(nil.to_json)
=> JSON::ParseError: 743: unexpected token at...

幸运的是,JSON解析器带有一个允许解析单个值的“怪癖模式”:

"hello".to_json
=> "\"hello\""

JSON.parse("hello".to_json, {:quirks_mode => true})
=> "hello"

nil.to_json
=> "null"

JSON.parse(nil.to_json, {:quirks_mode => true})
=> nil

我不确定:quirks_mode真的在做什么,也许有人可以解释一下?