Python请求。获取响应包含意外值

2024-10-03 19:29:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用requests.get命令从URL/REST端点检索数据。数据应该是JSON格式的。当我从浏览器访问URL时,它具有您期望的格式,即[{"variable1":value,"variable2":value}]。但是,当我使用requests.get命令获取数据时,返回的数据将被分解并包含额外的值行,这些值看起来像是十六进制,表示后续行中的字符数。下面是response.text返回内容的示例。在

 2000

 [{"variable1":v

 2000

 alue,"variable2

 1ecd

 ":value}]

 0

2000 base 16=8192 base 10,表示后续行有8192个字符。请注意,在上面的示例中,我特意缩短了行以不显示8192个字符:)。在

不用说,这不符合JSON格式,因此我无法按预期处理它。你有没有想过为什么会发生这种情况?我的猜测是,它可能与接收到的响应的大小有关-len(response.content)表示它的大小是335898字节-所以我尝试按here的方式分块响应,但这并没有影响response.text的输出。欣赏人们可以分享的任何想法:)

EDIT1:运行print(response.json())会产生以下错误:

^{pr2}$

编辑2:问题已解决。请看下面我的答案。在


Tags: 数据text命令jsonurl示例baseget
3条回答

你试过response.json()而不是response.text?在

看起来这里有一些格式非常糟糕的json,首先应该做的是:

import re response = response.text #filter out the newlines from literal response = re.sub('\n','',response) filtered_response = re.search('\[.*\]',response).group(0) #We still have a bad json string - '[{"variable1":v 2000 alue,"variable2 1ecd ":value}]', values should be quoted not only keys.

和13;
和13;

现在您已经有了近似值,您可以到处玩regex并引用这些值,但您不必这样做。因此,如果控制字符串源,请尝试先引用值。在

问题已经解决了。它似乎与Python版本有关。我从v3.5.1改为使用v2.7.13,解决了这个问题。JSON数据现在返回为一个字符串,不添加十六进制。在

相关问题 更多 >