2014-09-13 4 views
1

я могу импортировать этот канал JSon с этим кодомпитон подачи JSON возвращается строка не приемлю

import json 
import requests 
url = 'http://espn.go.com/sports/scores/feed?sportId=28&eventId=0&rand=1410039271798&xhr=1' 
r = requests.get(url) 
pbpObj = json.loads(r.content) 

, но когда я пытаюсь загрузить этот канал JSON я получаю следующую ошибку

«http://data.ncaa.com/jsonp/scoreboard/football/fbs/2014/03/scoreboard.html?callback=ncaaScoreboard.dispScoreboard»

ValueError        Traceback (most recent call last) 
<ipython-input-499-a086c9c2c95f> in <module>() 
     3 url = 'http://data.ncaa.com/jsonp/scoreboard/football/fbs/2014/03/scoreboard.html?callback=ncaaScoreboard.dispScoreboard' 
     4 r = requests.get(url) 
----> 5 pbpObj = json.loads(r.content) 

C:\Python27\lib\json\__init__.pyc in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 
    336    parse_int is None and parse_float is None and 
    337    parse_constant is None and object_pairs_hook is None and not kw): 
--> 338   return _default_decoder.decode(s) 
    339  if cls is None: 
    340   cls = JSONDecoder 

C:\Python27\lib\json\decoder.pyc in decode(self, s, _w) 
    363 
    364   """ 
--> 365   obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    366   end = _w(s, end).end() 
    367   if end != len(s): 

C:\Python27\lib\json\decoder.pyc in raw_decode(self, s, idx) 
    381    obj, end = self.scan_once(s, idx) 
    382   except StopIteration: 
--> 383    raise ValueError("No JSON object could be decoded") 
    384   return obj, end 

ValueError: No JSON object could be decoded 
+0

OK pbpObj = r.content works Спасибо – user2333196

+0

Но это не декодировано JSON. Я просил вас показать, что такое * in * 'r.content'. Что сервер вернулся к вам, а не JSON? А что такое 'r.status_code'? –

+0

OK sorry r.status_code - 200 r.content возвращает строку, которая выглядит так же, как если бы вы ввели URL-адрес в браузер – user2333196

ответ

2

Вы пытаетесь загрузить JSONP данные, а не данные JSON. JSONP (JSON with Padding) обертывает данные JSON в обратном вызове.

Я не мог найти версию JSON одного и того же API; вам сначала нужно развернуть обратный вызов. Используйте короткое имя обратного вызова известной длины, чтобы сделать это легче для себя:

url = 'http://data.ncaa.com/jsonp/scoreboard/football/fbs/2014/03/scoreboard.html?callback=c' 
r = requests.get(url) 
pbpObj = json.loads(r.content[2:-2]) 

Срез строки удаляет код c(...); обратного вызова от начала и конца ответа.

+0

спасибо, я не знал, что это был jsonp – user2333196

Смежные вопросы