Rails 如何禁止 #to_json 方法对中文的 escape

nilisnil · 2012年05月31日 · 最后由 nilisnil 回复于 2012年05月31日 · 3757 次阅读

如题,把 {:title=>"水浒传", :author=>"施耐庵"}.to_json 就转成下面这样了 {"title":"\u6c34\u6d52\u4f20","author":"\u65bd\u8010\u5eb5"}

有没有办法不转换呢

Monkey Patch? 应该不是个好主意。 楼主为什么要禁止转换呢?

我一般是这个样子用的: gsub(/\\u([0-9a-z]{4})/){|s| [$1.to_i(16)].pack("U")}

下面是测试的例子:

o = {:name=>"米乐游戏",:age=>1}
=> {:name=>"米乐游戏", :age=>1}
[26] pry(main)> o.to_json
=> "{\"name\":\"\\u7c73\\u4e50\\u6e38\\u620f\",\"age\":1}"
[27] pry(main)> o.to_json.gsub(/\\u([0-9a-z]{4})/){|s| [$1.to_i(16)].pack("U")}
=> "{\"name\":\"米乐游戏\",\"age\":1}"
[28] pry(main)> 


#1 楼 @heliang7 要写到文件中,而不是返回给浏览器

我的方法是这样的

array = [{name: name1, age: 20}, {name:name2, age: 20}]
File.open("file.yml", 'w:ASCII-8BIT:utf-8') do |file|
  YAML.dump(array, file)
end

#6 楼 @ywjno YAML 可以,但是 JSON 好像不行呢

#7 楼 @nilisnil 抱歉啊。。。听到你说要写到文件里,还以为是把那串东西先to_json再写进去

#8 楼 @ywjno 是先 to_json 再写进去,但是你写的是 yaml 又不是 json

需要 登录 后方可回复, 如果你还没有账号请 注册新账号