我需要提取json的每个键值,并且该值应保存在数据库中。但是我在获取json中每个键的值时遇到了麻烦。
JSON
{
"topo": [
{
"dpid": "00:00:00:00:00:00:00:03",
"ports": [
3,
1
]
}
],
"app": "vm_migration"
}
码
post '/save_summary', :provides => :json do
begin
params = JSON.parse(request.env["rack.input"].read)
return params["topo"][0]["dpid"]
#above code return correct value
return params["topo"][0]["ports"] #this is not working
rescue Exception => e
return e.message
end
end
我不知道ports语句有什么问题,请帮我弄清楚小问题。
答案 0 :(得分:3)
您要归还的内容 - params["topo"][0]["ports"]
- 是一个包含两个元素的数组,它是things you can return from a Sinatra route之一:
- 包含两个元素的数组:
[status (Fixnum), response body (responds to #each)]
因此,您尝试返回状态为3
且正文为1
的回复。响应主体需要是响应each
的对象,1
不响应。如果您检查日志或控制台,则可能会看到错误undefined method `each' for 1:Fixnum
。假设您只想在浏览器中查看数组,只需将其转换为字符串:
return params["topo"][0]["ports"].to_s
第一个示例有效,因为params["topo"][0]["dpid"]
是一个字符串,您可以从路径返回字符串。