ToodledoAPI 2.0中的Ruby Sinatra和JSON对象
我在接收JSON对象时遇到了一个小问题。我使用的是Ruby 1.9.3,我的目标是通过API接收我的任务,并将它们打印到页面上 我创建了一个路由ToodledoAPI 2.0中的Ruby Sinatra和JSON对象,ruby,json,sinatra,Ruby,Json,Sinatra,我在接收JSON对象时遇到了一个小问题。我使用的是Ruby 1.9.3,我的目标是通过API接收我的任务,并将它们打印到页面上 我创建了一个路由/test: get '/test' do json_ip_url = "http://api.toodledo.com/2/tasks/get.php?key=198196ae24792467eec09ac2191*****;modafter=1234567890;fields=folder,star,priority" ip_detail
/test
:
get '/test' do
json_ip_url = "http://api.toodledo.com/2/tasks/get.php?key=198196ae24792467eec09ac2191*****;modafter=1234567890;fields=folder,star,priority"
ip_details = RestClient.get(json_ip_url)
test = JSON.pretty_generate(ip_details) # => throws exception
end
JSON#pretty_generate
行抛出一个错误,“只允许生成JSON对象或数组”。我做错了什么
更新:
我现在可以通过pretty_generate进行输出,但是我必须做什么才能获得它的元素呢。这是JSON数据,在我看来,它是一个包含对象的数组
[{"num":"18","total":"18"},{"id":"11980343","title":"Add some items to your todo list","modified":1391670256,"completed":0,"folder":"0","star":"0"},{"id":"11980345","title":"Visit the Settings section and configure your account","modified":1391670256,"completed":0,"folder":"0","star":"0"},{"id":"11980347","title":"Watch our tutorial videos in the Help section","modified":1391670256,"completed":0,"folder":"0","star":"1"},{"id":"12607789","title":"test","modified":1392285802,"completed":0,"folder":"0","star":"0"},{"id":"12636039","title":"My Task","modified":1392308705,"completed":0,"folder":"0","star":"0"},{"id":"12636041","title":"Another","modified":1392308705,"completed":0,"folder":"0","star":"1"},{"id":"12636143","title":"My Task","modified":1392308789,"completed":0,"folder":"0","star":"0"},{"id":"12636145","title":"Another","modified":1392308789,"completed":0,"folder":"0","star":"1"},{"id":"12636449","title":"My Task","modified":1392308950,"completed":0,"folder":"0","star":"0"},{"id":"12636451","title":"Another","modified":1392308950,"completed":0,"folder":"0","star":"1"},{"id":"12636621","title":"My Task","modified":1392309061,"completed":0,"folder":"0","star":"0"},{"id":"12636623","title":"Another","modified":1392309061,"completed":0,"folder":"0","star":"1"},{"id":"12636665","title":"My Task","modified":1392309085,"completed":0,"folder":"0","star":"0"},{"id":"12636667","title":"Another","modified":1392309085,"completed":0,"folder":"0","star":"1"},{"id":"12636733","title":"My Task","modified":1392309137,"completed":0,"folder":"0","star":"0"},{"id":"12636735","title":"Another","modified":1392309137,"completed":0,"folder":"0","star":"1"},{"id":"12637135","title":"My Task","modified":1392309501,"completed":0,"folder":"0","star":"0"},{"id":"12637137","title":"Another","modified":1392309501,"completed":0,"folder":"0","star":"1"}]
我用于生成的代码:
get '/save' do
jdata = params[:data]
response = RestClient.get 'http://api.toodledo.com/2/tasks/get.php?key=da21e24e2a00ba9d45008974aed00***;modafter=1234567890;fields=folder,star,priority', {:accept => :json}
test = JSON.parse(response)
test.to_json
output = JSON.pretty_generate(test)
puts output
RestClient#get
在调用时以字符串(而不是哈希或数组)的形式返回原始响应,因此ip#u details
不是一个JSON#pretty#u generate
知道如何处理的结构。您需要先使用JSON#parse
将响应转换为哈希或数组。谢谢,但老实说,我不知道我是否理解正确,我需要RestClient#接收我的数据,如果我尝试用JSON#parse解析它,我会在/test未定义的{“num”=>“18”方法'bytesize'处遇到另一个错误code
NoMethodError,“total”=>“18”}:Hash也许还有其他方法可以从API获取数据?正如您所说,RestClient返回原始响应,有其他方法吗?感谢您的帮助!@user3306721编辑您的问题,并输入修改后的代码和错误消息(请相应地格式化它们)