0

我正在编写一个 API Wrapper 并遇到了一个我不确定如何解决的问题。

这是法拉第设置:

@connection = Faraday.new(url: @api_url, params: params,
                                headers: default_headers,
                                ssl: { verify: true } ) do |faraday|
                                  faraday.use FaradayMiddleware::Mashify
                                  faraday.use FaradayMiddleware::ParseJson, content_type: /\bjson$/
                                  faraday.use FaradayMiddleware::FollowRedirects
                                  faraday.adapter Faraday.default_adapter
                                end

这适用于我正在进行的 95% 的 API 调用——它解析 JSON 就像我需要它和 Mashify 一样。伟大的。

问题是当 API 返回一个未包含在 JSON 对象中的 JSON 值时。API调用是这样的:

https://hacker-news.firebaseio.com/v0/maxitem.json

我可以看到这不是 jsonlint 中的有效 JSON 对象(下面的屏幕截图)。

jsonlint

我需要单独为这个调用重新配置一个新的法拉第实例吗?这似乎有些多余,但它显然在FaradayMiddleware::ParseJson课堂上爆炸了。

我的 RSpec 测试返回这个:

Failure/Error: latest = client.max_item
     Faraday::ParsingError:
       757: unexpected token at '8438316'

任何帮助表示赞赏。

4

1 回答 1

1

根据JSON 语法,裸数字不是 JSON,它只是一个数字。所以是的,看起来他们的 API 有点不一致,您需要为该方法进行不同的配置。

于 2014-10-10T17:13:35.527 回答