Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将Py3k HTTPResponse转储到json.load中?_Python_Json_Python 3.x_Urllib2 - Fatal编程技术网

Python 如何将Py3k HTTPResponse转储到json.load中?

Python 如何将Py3k HTTPResponse转储到json.load中?,python,json,python-3.x,urllib2,Python,Json,Python 3.x,Urllib2,我原以为json.load()应该能够像http.client.HTTPResponse一样读取对象,但它的read()。(我正在使用Python3.3。)令我惊讶的是,我发现没有任何资源可以直接解决这个问题,尽管我认为这是一个主要的用例 import urllib.request, json # Y!F url yf = 'http://d.yimg.com/autoc.finance.yahoo.com/autoc' # Mock lookup data = urllib.parse.u

我原以为
json.load()
应该能够像
http.client.HTTPResponse
一样读取对象,但它的
read()。(我正在使用Python3.3。)令我惊讶的是,我发现没有任何资源可以直接解决这个问题,尽管我认为这是一个主要的用例

import urllib.request, json

# Y!F url
yf = 'http://d.yimg.com/autoc.finance.yahoo.com/autoc'

# Mock lookup
data = urllib.parse.urlencode({'query': 'Ford', 'callback': 'YAHOO.Finance.SymbolSuggest.ssCallback'})
data = data.encode('utf-8')
request = urllib.request.Request(yf)
request.add_header('User-Agent','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/536.26.14 (KHTML, like Gecko) Version/6.0.1 Safari/536.26.14')
request.add_header('Content-type','text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8;charset=utf-8')
request.add_header('Accept','text/plain')

mock = urllib.request.urlopen(request, data)
json.load(mock)
这将导致以下错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/__init__.py", line 264, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/__init__.py", line 309, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/decoder.py", line 352, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: can't use a string pattern on a bytes-like object
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/_init__.py”,第264行,已加载
parse_常量=parse_常量,object_pairs_hook=object_pairs_hook,**千瓦)
文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/_init__.py”,第309行,在loads中
返回\u默认\u解码器。解码
文件“/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/json/decoder.py”,第352行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
TypeError:无法在类似字节的对象上使用字符串模式

这一问题已在上一个线程中解决: (HT:Matthew Trevor)

还有,什么雅虎!这里返回的不仅仅是JSON对象,还有一个
YAHOO.Finance.SymbolSuggest.ssCallback()
wrapper。脱衣可以解决问题。(尽管仍然很难过,但这是必要的。)

这项工作:

import urllib.request, json, re

# Y!F url
yf = 'http://d.yimg.com/autoc.finance.yahoo.com/autoc'

# Mock lookup
data = urllib.parse.urlencode({'query': 'Ford', 'callback': 'YAHOO.Finance.SymbolSuggest.ssCallback'})
data = data.encode('utf-8')
request = urllib.request.Request(yf)
response = urllib.request.urlopen(request, data)
j = json.loads(re.search(r'{.*}',response.readall().decode('utf-8')).group())

这已在前一个线程中解决: (HT:Matthew Trevor)

还有,什么雅虎!这里返回的不仅仅是JSON对象,还有一个
YAHOO.Finance.SymbolSuggest.ssCallback()
wrapper。脱衣可以解决问题。(尽管仍然很难过,但这是必要的。)

这项工作:

import urllib.request, json, re

# Y!F url
yf = 'http://d.yimg.com/autoc.finance.yahoo.com/autoc'

# Mock lookup
data = urllib.parse.urlencode({'query': 'Ford', 'callback': 'YAHOO.Finance.SymbolSuggest.ssCallback'})
data = data.encode('utf-8')
request = urllib.request.Request(yf)
response = urllib.request.urlopen(request, data)
j = json.loads(re.search(r'{.*}',response.readall().decode('utf-8')).group())

看来你可能碰到了这个问题:@MatthewTrevor,真的,谢谢。readall encode loads解决方案让我走得更远,但只有这一步:
ValueError:没有JSON对象可以被解码
我非常确定Yahoo!从我问题中的URL返回一个JSON对象。我现在做错了什么?(我知道,可能与原来的问题无关。)我明白了。因为它有一个围绕JSON对象的函数包装器。我以为这就是它的工作原理。现在已修复。看来您可能遇到了此问题:@MatthewTrevor,的确,谢谢。readall encode loads解决方案让我走得更远,但只有这一步:
ValueError:没有JSON对象可以被解码
我非常确定Yahoo!从我问题中的URL返回一个JSON对象。我现在做错了什么?(我知道,可能与原来的问题无关。)我明白了。因为它有一个围绕JSON对象的函数包装器。我以为这就是它的工作原理。现在修复。我无法让雅虎财务链接工作,抱歉,所以我没有看到包装。很高兴你解决了!很抱歉,我无法让Yahoo Financials链接正常工作,所以我没有看到包装器。很高兴你解决了!