通常我的api返回json,但有时会返回一个完整的响应对象?

时间:2017-07-15 21:07:53

标签: python json

所有

我有一个脚本,它可以从网络服务器中获取JSON。简单如下:

url = "foo.com/json"
response = requests.get(url).content
data = json.loads(response)

但我注意到有时候它会返回看起来像响应转储的东西而不是返回JSON对象。见这里:https://pastebin.com/fUy5YMuY

令我困惑的是如何继续。

现在我把上面的python包起来了

try:
    url = "foo.com/json"
    response = requests.get(url).content
    data = json.loads(response)
except Exception as ex:
    with open("test.txt", "w") as t:
        t.write(response)
    print("Error", sys.exc_info())

有没有办法抓住这个?现在我得到一个ValueError ...然后重新解析它?我当时想做点什么:

except Exception as ex:
    response = reparse(response)

但我仍然感到困惑,为什么它有时会返回JSON和其他时间,标题信息+内容。

def reparse(response):
    """
    Catch the ValueError and attempt to reparse it for the json contnet
    """

我可以将类似pastebin转储的内容提供给某种请求。响应类或类似的吗?

编辑这是我得到的完整堆栈跟踪。

File "scrape_people_by_fcc_docket.py", line 82, in main
    json_data = get_page(limit, page*limit)
File "scrape_people_by_fcc_docket.py", line 13, in get_page
    data = json.loads(response)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 369, in decode
    raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 2 column 1 - line 16 column 367717 (char 3 - 368222)
 None

在上面的代码中,response变量由:

定义
response = requests.get(url).content

这很奇怪,因为大部分时间,响应将返回一个完全可解析的JSON对象。

理想情况下,我一直试图找到一种方法,当内容不是JSON时,传递一些如何解析它的实际内容,然后继续。

1 个答案:

答案 0 :(得分:0)

而不是使用.text.content您可以使用响应方法:.json()到目前为止似乎解决了我的问题。我正在进行持续测试并观察错误,并将根据需要更新它,但似乎json函数将返回我需要的数据而没有标题,同样已经调用json.loads或类似来解析信息。