我从某些API中获取了一个JSON字符串
[{" _id" = GT;" 56aefb3b653762000b400000&#34 ;, " checkout_started_at" = GT;" 2016-02-01T07:32:09.120 + 01:00&#34 ;, " created_at" =>" 2016-02-01T07:29:15.695 + 01:00",...}]
我想根据created_at
过滤此字符串中的数据,例如让用户选择一个特定的日期范围,然后只显示该范围内的数据。
E.g。
@output = my_json.where(created_at: start_date..end_date)
我的第一个想法是以某种方式将JSON字符串传递给Hashie
,以便在数据是对象的情况下与JSON交互:
my_json = (my_json).map { |hash| Hashie::Mash.new(hash) }
但是没有成功
未定义的方法`其中' for Array:0x007fd0bdeb84e0
如何根据特定条件甚至SQL查询过滤出JSON字符串中的数据?
答案 0 :(得分:0)
这种最简单的方法是直接在哈希数组上使用Enumberable#select
:
require 'time'
myjson.select { |o| Time.iso8601(o["created_at"]).between?(start_date, end_date) }
如果你想要一个围绕原始数据的奇特界面:
require 'time' # not needed in rails
class Order < Hashie::Mash
include Hashie::Extensions::Coercion
coerce_key :created_at, ->(v) do
return Time.iso8601(v)
end
end
class OrderCollection
def initialize(json)
@storage = json.map { |j| Order.new(j) }
end
def between(min, max)
@storage.select { |t| t.created_at.between?(min, max) }
end
end
orders = OrderCollection.new(myjson)
orders.between(Time.yesterday, Time.now)