【问题标题】:HTTPArty/Rails: How to handle the Response arrayHTTPArty/Rails:如何处理响应数组
【发布时间】:2013-08-23 02:59:15
【问题描述】:

我正在调用一个返回 JSON 对象数组的 API,但我似乎无法正确访问每个元素。这是 API 调用的示例返回值

[{"param1":1,"param2":"blah1"},
{"param1":2,"param2":"blah2"},
{"param1":3,"param2":"blah3"}]

这是我尝试调用 API 并打印第一个 JSON 响应对象的参数

result = HTTParty.get('http://randomapi.com',query: options)
@a = result[0]['param1']
# puts "#{result}"
puts "#{@a}"

这样做不会打印任何内容。我知道我已成功访问该 URL,因为结果将打印正确的信息。

我获得了有关如何通过此 URL 访问 JSON 响应的信息 http://blog.teamtreehouse.com/its-time-to-httparty

编辑: 在阅读了下面的 cmets 之后,我意识到 API 调用返回的内容类型为 text/html 并且解析 text/html 不起作用,因为响应还返回了低于预期值的以下标头。有什么方法可以在不进入字符串本身并将其剥离的情况下删除它?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html 
    xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title></title>
    </head>
    <body>
        <form method="post" action="GetRankingList.aspx?pvptype=1&amp;sid=1&amp;tm=20130821160000&amp;auth=77c9b582c3aed3d3974400cfb118fe4b" id="form1">
            <div class="aspNetHidden">
                <input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTE2MTY2ODcyMjlkZLSAAAtd4/lj1u6b0GjPWM+p3i9tqI6sq+xDrRw2cAv3" />
            </div>
            <div></div>
        </form>
    </body>
</html>

【问题讨论】:

    标签: javascript ruby-on-rails json httparty


    【解决方案1】:

    API 似乎返回了一个 Content-Typeapplication/json 不同的响应。您可以通过打印来检查:

    puts result.content_type
    

    如果是这样,HTTParty 解析器可能会将响应解释为纯文本;因此,代码result[0]['param1'] 的计算结果为nil 也许您可以尝试将所需的值解析为@a

    @a = JSON.parse(result)[0]['param1']
    

    别忘了需要 json 库

    require 'json'
    

    祝你好运!

    【讨论】:

    • 谢谢,您帮助我意识到它没有返回正确的 JSON 格式。我尝试了您的解决方案,但在这种情况下不起作用。我在刚刚进行的编辑中提供了更多详细信息
    • 我不知道您使用的 API 的详细信息。也许 API 不正确,或者您可以以只返回预期的 json 的方式调用它(没有额外的 html)。如果你最终决定去掉标题,你可以使用:result[0...result.index('&lt;!DOCTYPE')]。干杯!
    • 我决定去掉标题。谢谢!!
    【解决方案2】:

    您需要从结果中解析 parsed_response

    @parsed = JSON.parse(result.parsed_response)
    

    【讨论】:

      【解决方案3】:

      使用格式访问json时

      require 'json'
      result = JSON.parse('[{"param1":1,"param2":"blah1"},{"param1":2,"param2":"blah2"}, {"param1":3,"param2":"blah3"}]')
      @a = result[0]["param1"]
      puts @a
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-19
        相关资源
        最近更新 更多