【问题标题】:Ruby Sinatra and JSON objects from toodledo API 2.0来自 tooledo API 2.0 的 Ruby Sinatra 和 JSON 对象
【发布时间】:2014-03-12 14:41:27
【问题描述】:

我在接收 JSON 对象时遇到了一个小问题。我正在使用 Ruby 1.9.3,我的目标是通过RestClient 从 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_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"}]

我用于 pretty_generate 的代码:

     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

【问题讨论】:

    标签: ruby json sinatra


    【解决方案1】:

    RestClient#get 在没有块的情况下以字符串(而不是哈希或数组)的形式返回原始响应,因此ip_details 不是JSON#pretty_generate 知道如何处理的结构。您需要先使用JSON#parse 将响应转换为哈希或数组。

    【讨论】:

    • 谢谢,但老实说,我不知道我是否正确,我需要 RestClient#get 来接收我的数据,如果我尝试用 JSON#parse 解析它,我会收到另一个错误codeNoMethodError at /test undefined method `bytesize' for {"num"=>"18", "total"=>"18"}:Hash
    • 也许还有另一种从 API 获取数据的方法?正如您所说,RestClient 返回原始响应,是否有替代方案?感谢您的帮助!
    • @user3306721 编辑您的问题并输入修改后的代码和错误消息(请相应地格式化)
    猜你喜欢
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 2017-10-12
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多