ruby-on-rails - 在 Ruby 中,递归地从 json 字符串中删除空白项

标签 ruby-on-rails ruby json recursion is-empty

我有一个 JSON 字符串,我需要从中删除所有空白值。像这样的东西:

[{"body":"","user":"mike","id":1234567,"type":"","published_at":"2015-05-22T14:51:00-04:00","title":null,"updated_at":"2015-05-23T22:04:38-04:00","postoffice":"Testing","tags":"","variants":[{"value":"", "service":"canada post"}]}]

我考虑过遍历所有元素并测试它们是否为“”,我还考虑过通过 JSON.load 加载 JSON 并让 proc 选项删除空白(尽管我对 Ruby 还很陌生并且不知道该怎么做)。

从 JSON 字符串中递归删除所有空白值的最佳方法是什么? (请注意,在此示例中,为了简化,变体只有一层深。实际上它可以有很多层深。)

为了完整起见,最终结果应如下所示:

[{"user":"mike","id":1234567,"published_at":"2015-05-22T14:51:00-04:00","title":null,"updated_at":"2015-05-23T22:04:38-04:00","postoffice":"Testing","variants":[{"service":"canada post"}]}]

(在我的情况下可以使用空值)。

最佳答案

require 'json'

JSON.load(json, proc do |a|
  a.is_a?(Hash) && a.delete_if do |_k,v|
    next unless v.is_a?(String)
    v.empty?
  end
end

结果:

[{"user"=>"mike",
  "id"=>1234567,
  "published_at"=>"2015-05-22T14:51:00-04:00",
  "title"=>nil,
  "updated_at"=>"2015-05-23T22:04:38-04:00",
  "postoffice"=>"Testing",
  "variants"=>[{"service"=>"canada post"}]}]

关于ruby-on-rails - 在 Ruby 中,递归地从 json 字符串中删除空白项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30427610/

相关文章:

ruby-on-rails - 如何在不删除 `test` 数据库数据的情况下测试 JavaScript?

ruby - 如何使用非常大的 Ruby 哈希减少内存使用量?

sql - 如何从 JSONB 列中提取数据

php - Laravel Eloquent - 在 PostgreSQL 中更新 JSON col 时遇到问题

ruby-on-rails - 具有多个命名空间的 Rails 应用程序

javascript - Ruby on Rails 使用 OR 查找

ruby-on-rails - 重构 ruby

ruby-on-rails - ruby 是_a?对比===

Java方法中的方法调用

json - 如何使用 Alamofire 用 JSON 数据填充我的对象数组