所以,我使用to_json将Ruby on Rails中的对象序列化为JSON格式。产生的结果是:
'{"description":"---\n- Nulla adipisci quia consequuntur nam ab et. Eius enim ad aut. Asperiores recusandae\n labore exercitationem.\n quos provident.\n","id":295,"name":"Animi enim dolorem soluta eligendi inventore quia distinctio magni.","privacy":0,"updated_at":"2012-11-18T22:24:17Z","user_id":1}'
这需要由JSON.parse解析以在客户端javascript中反序列化对象。目前,由于“description”值中的换行符\n
,因此失败了。我试图使用gsub("\n","\\n")
和其他排列来适当地编码字符,但我似乎无法找到一个正确匹配换行符的字符串或正则表达式(只有换行符)。我尝试了/\n/
,'\n'
,"\n"
,"\\n"
(由于某种原因,这匹配字符串的所有位置),/\\n/
等等,但是避风港找不到任何东西。我缺少什么想法?
更新:这是代码(javascript,但是带有嵌入式ruby)我正在尝试用来填充javascript对象(它在ERB视图中,因此是尖括号):
var object = JSON.parse('<%= raw @object.to_json %>');
to_json
在我的目标代码中没有被覆盖,只是标准的rails方法。
答案 0 :(得分:1)
j = %Q!{"description":"---\n- Nulla adipisci quia consequuntur nam ab et. Eius enim ad aut. Asperiores recusandae\n labore exercitationem.\n quos provident.\n","id":295,"name":"Animi enim dolorem soluta eligendi inventore quia distinctio magni.","privacy":0,"updated_at":"2012-11-18T22:24:17Z","user_id":1}!
j.gsub! /\n/, '\\n'
JSON.parse j
# => {"description"=>"---\n- Nulla adipisci quia consequuntur nam ab et. Eius enim ad aut. Asperiores recusandae\n labore exercitationem.\n quos provident.\n", "id"=>295, "name"=>"Animi enim dolorem soluta eligendi inventore quia distinctio magni.", "privacy"=>0, "updated_at"=>"2012-11-18T22:24:17Z", "user_id"=>1}
让您的生活变得轻松,在需要操作它们时,在转义字符周围使用单引号。
更新后......
var object = JSON.parse('<%= raw @object.to_json.gsub(/\n/, %q!\\n!) %>');
答案 1 :(得分:1)
您的JSON包含一个YAML字符串,所以不要浪费时间尝试删除换行符,否则会让事情变得更糟,或者至少会让自己做太多工作。
require 'json'
require 'yaml'
json = '{"description":"---\n- Nulla adipisci quia consequuntur nam ab et. Eius enim ad aut. Asperiores recusandae\n labore exercitationem.\n quos provident.\n","id":295,"name":"Animi enim dolorem soluta eligendi inventore quia distinctio magni.","privacy":0,"updated_at":"2012-11-18T22:24:17Z","user_id":1}'
hash = JSON[json]
puts YAML.load(hash['description'])
输出:
Nulla adipisci quia consequuntur nam ab et. Eius enim ad aut. Asperiores recusandae labore exercitationem. quos provident.
JSON在解码回Ruby散列后,看起来像:
{"description"=> "---\n- Nulla adipisci quia consequuntur nam ab et. Eius enim ad aut. Asperiores recusandae\n labore exercitationem.\n quos provident.\n", "id"=>295, "name"=>"Animi enim dolorem soluta eligendi inventore quia distinctio magni.", "privacy"=>0, "updated_at"=>"2012-11-18T22:24:17Z", "user_id"=>1}
要将其重新转换为真正的JSON字符串,description
未编码为YAML,请使用:
hash['description'] = YAML.load(hash['description']).shift
puts hash.to_json
现在看起来像:
{"description":"Nulla adipisci quia consequuntur nam ab et. Eius enim ad aut. Asperiores recusandae labore exercitationem. quos provident.","id":295,"name":"Animi enim dolorem soluta eligendi inventore quia distinctio magni.","privacy":0,"updated_at":"2012-11-18T22:24:17Z","user_id":1}