2

我的 ExtJS 前端将这样的参数哈希发送到我的 Sinatra 后端:

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

如何获得参数“属性”和“方向”?

4

2 回答 2

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 会将其编码为其序列化格式。

于 2013-04-14T17:39:29.067 回答
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"
于 2013-04-14T17:30:54.487 回答