0

我正在调用一个返回 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 http://blog.teamtreehouse.com/its-time-to-httparty访问 JSON 响应的信息

编辑:阅读下面的评论后,我意识到 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>
4

3 回答 3

1

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

puts result.content_type

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

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

不要忘记需要 json 库

require 'json'

祝你好运!

于 2013-08-23T03:57:01.493 回答
0

使用格式访问 json 时

require 'json'
result = JSON.parse('[{"param1":1,"param2":"blah1"},{"param1":2,"param2":"blah2"}, {"param1":3,"param2":"blah3"}]')
@a = result[0]["param1"]
puts @a
于 2013-08-23T04:10:35.983 回答
0

您需要从结果中解析parsed_response

@parsed = JSON.parse(result.parsed_response)
于 2013-08-23T04:11:05.057 回答