是否可以将可读(未转义)的json呈现为HTML数据属性?

时间:2015-05-22 23:06:07

标签: ruby-on-rails json

我们将json渲染为ERB中的数据属性。例如:

location.html.erb

<div data-location="<%= render 'location_json' %>">

location_json.erb

<%= @location.to_json(
      only: [:id, :name, :lat, :lng],
      method: [:display_name]) %>

渲染的html看起来像:

<div data-location="{&quot;id&quot;:16,&quot;lat&quot;:&quot;35.688195&quot;,&quot;lng&quot;:&quot;-82.564652&quot;,&quot;name&quot;:&quot;Mountain&quot;}">

但我希望它更具可读性,例如:

<div data-location='{"id":16, "lat":35.688195, "lng":-82.564652, "name":"Mountain"}'&GT;

有没有办法告诉ERB或to_json使用单引号呈现而不是转义双引号?

是否可以将可读的json呈现为HTML数据属性。通过可读性,我的意思是最小的逃避。

3 个答案:

答案 0 :(得分:2)

<div data-location="<%= @location.to_json %>">

中的

package.json

参考: http://api.rubyonrails.org/classes/ERB/Util.html#method-c-json_escape

答案 1 :(得分:0)

任何gsub。(/'/,'')也会转义引号。

您甚至可以创建一个表并迭代json的响应,将键放在第一个td中,将值放在第二个上。如果你有一两个jsons会很好。如果您有很多分隔数量的元素,请为每个元素创建一行。

答案 2 :(得分:0)

在不破坏html页面的情况下,无法在数据属性中使用未转义的JSON。

但是,可以使用比Rails / ERB默认值更具可读性的转义JSON。

默认情况下,ERB会转义双引号,这使得JSON特别难以阅读。代替

  • 对html数据属性使用单引号
  • 调用raw以防止ERB使用字符串上的默认转义
  • 除了双引号
  • 之外,转义字符串中的所有html重要字符

helper.rb

def my_html_escape(s)
  { '&' => '&amp;', '>' => '&gt;', '<' => '&lt;', "'" => '&#39;' }.each do |k,v|
   s = s.gsub(k,v)
  end
  s
end

location.html.erb

<div data-location='<%= raw my_html_escape(@location.to_json) -%>'>

产生

<div data-location='{"id":16, "lat":35.688195, "lng":-82.564652, "name":"Mountain"}'>