我在将请求中的JSON解析到我的Sinatra应用程序时遇到了一些困难:
response = JSON.pretty_generate(request.env)
reply = response["rack.request.form_hash"]
导致回复:
rack.request.form_hash
作为字符串而不仅仅是响应的相关部分:
{...
"rack.request.form_hash": {
"token": "token",
"team_id": "team",
"team_domain": "teamname",
"service_id": "service",
"channel_id": "channel",
"channel_name": "testing-webhooks",
"timestamp": "1424480976.000910",
"user_id": "U029W1WF2",
"user_name": "myusername",
"text": "checkeverything",
"trigger_word": "checkeverything"
},
...}
这是我正在尝试解析的JSON请求对象中。当我使用时:
response["rack.request.form_hash"]["user_name"]
没有任何回复。我的日志中返回以下内容:
App 1662 stdout:
App 1640 stderr: JSON::ParserError - 746: unexpected token at 'No text specified':
所以看起来它没有正确迭代,或者可能无法访问它。
我查看了其他文档和其他帖子,但发现没有什么对我有用,但我肯定会忽略一些东西,但我不确定是什么。
在对Sinatra的请求中解析此嵌套数组的最佳方法是什么?
答案 0 :(得分:1)
这应该解决它:
res = JSON.parse( JSON.generate(request.env) )
res.class
# => Hash
res["rack.url_scheme"]
# => http
原因是JSON.generate仅为字符串中的对象和数组生成JSON语法。然后,您需要使用JSON.parse将生成的JSON字符串解析为Ruby中的哈希。