Rails过滤渲染中的JSON对象?

时间:2012-12-26 18:14:59

标签: ruby-on-rails json parsing filter

我有一个JSON字符串,我使用:

objJson = JSON.parse(jsonString)

respond_to do |format|
  format.html { render :json => objJson.to_json(:include =>  [:ID, :Name]) }
end

问题是to_json仅适用于模型,因此它会忽略我的过滤器。

这是我的JSON:

{
 "count":29,
 "results":
 [
   {"ID":556036109,"Name":"Mojos", "Url":"https://mojos/id300751949","currency":"USD"},
   {"ID":556036110,"Name":"Asav", "Url":"https://asav/id300751949","currency":"USD"}
 ]
}

有没有办法在渲染上过滤JSON对象?


UPDATE:

我使用了 ssorallen 代码:

KEYS_TO_KEEP = ['ID', 'Name']
objJson = JSON.parse(jsonString)

respond_to do |format|
  format.html {render :json => objJson['results'].keep_if {|k, v| KEYS_TO_KEEP.include?(k)}}
end

问题是objJson ['results']将一个数组返回给Hashes而不是一个Hash。

所以正确的做法是:

objJson = objJson['results'].each { |x| x.keep_if {|k, v| KEYS_TO_KEEP.include?(k)} }

1 个答案:

答案 0 :(得分:0)

您可以在像keep_if这样的Ruby哈希中使用其中一种方法:

KEYS_TO_KEEP = ['ID', 'Name']
objJson['results'] =
  objJson['results'].keep_if {|k, v| KEYS_TO_KEEP.include?(k)}

format.html {render :json => objJson}