如何从params数组中检索Ruby / Sinatra参数?

时间:2013-04-14 17:26:12

标签: ruby hashmap params

我的ExtJS前端向我的Sinatra后端发送了这样一个参数哈希:

{"_dc"=>"1365959782607", "page"=>"6", "start"=>"250", "limit"=>"50", "sort"=>"[{\"property\":\"port\",\"direction\":\"ASC\"}]"}

如何获得params'属性'和'方向'?

2 个答案:

答案 0 :(得分:0)

您可以通过以下方式执行此操作:

require 'json'
a = {"_dc"=>"1365959782607", "page"=>"6", "start"=>"250", "limit"=>"50", "sort"=>"[{\"property\":\"port\",\"direction\":\"ASC\"}]"}

sort = JSON.parse a["sort"]
p sort[0]["property"] # "port"
p sort[0]["direction"]  # "ASC"

答案 1 :(得分:0)

您的问题与Sinatra无关,这是如何从哈希中提取值并处理JSON的基本问题:

require 'json'
hash = {"_dc"=>"1365959782607", "page"=>"6", "start"=>"250", "limit"=>"50", "sort"=>"[{\"property\":\"port\",\"direction\":\"ASC\"}]"}

JSON[hash['sort']].first.values_at('property', 'direction')
=> ["port", "ASC"]

使用JSON[hash['sort']]解析序列化对象将返回包含单个哈希的数组。 first将返回该哈希值。在这一点上,这只是通常的方法来获得价值。我使用values_at将它们作为数组返回。

传递JSON[]一个字符串,JSON将尝试解析它,期望一个JSON编码对象。传递JSON[]另一个对象,如数组或散列,JSON会将其编码为序列化格式。