从具有复杂哈希的 Params 中获取特定键的值

Get value of a specific key from Params with complex hash

我正在为 Facebook Messenger 开发一个应用程序,我正在从 Messenger 获取此参数。我想获取这些参数并存储发件人、文本和其他数据。但是我无法在控制器中获取这些参数。

当我尝试 params[:text] 时它不起作用,如果我尝试 params[:entry][:messaging][1] 或类似的东西不起作用。

{"object":"page",
  "entry":[
    {
      "id":"PAGE_ID",
      "time":1460245674269,
      "messaging":[
        {
          "sender":{
            "id":"USER_ID"
          },
          "recipient":{
            "id":"PAGE_ID"
          },
          "timestamp":1460245672080,
          "message":{
            "mid":"mid.1460245671959:dad2ec9421b03d6f78",
            "seq":216,
            "text":"hello"
          }
        }
      ]
    }
  ]
}

如果你能告诉我如何编写我的控制器,这样我就可以从 [:text] 中获取价值,那就太好了。 谢谢。

您只需简单地解析您的 JSON 并爬行直到您到达指定的键 在您的情况下,您想要获取文本键

这样做:

我假设你得到的 JSON 被分配给 json_value 变量:

json_value = '{"object":"page",
  "entry":[
    {
      "id":"PAGE_ID",
      "time":1460245674269,
      "messaging":[
        {
          "sender":{
            "id":"USER_ID"
          },
          "recipient":{
            "id":"PAGE_ID"
          },
          "timestamp":1460245672080,
          "message":{
            "mid":"mid.1460245671959:dad2ec9421b03d6f78",
            "seq":216,
            "text":"hello"
          }
        }
      ]
    }
  ]
}'

接下来,解析 JSON:

json = JSON.parse(json_value)

那么现在,您可以通过以下方式获得想要的值:

json["entry"][0]["messaging"][0]["message"]["text"]

输出:

=> "hello"

Demonstration