URL을 통해 JSON 데이터를 얻고 Python (SimpleJson)에서 사용합니다.
-
08-07-2019 - |
문제
나는 이것이 간단한 대답을 가져야한다고 생각하지만 고군분투하고있다 : 나는 URL (JSON을 출력)을 가져 와서 Python에서 사용 가능한 사전으로 데이터를 얻고 싶다. 나는 마지막 단계에 붙어 있습니다.
>>> import urllib2
>>> import simplejson
>>> req = urllib2.Request("http://vimeo.com/api/v2/video/38356.json", None, {'user-agent':'syncstream/vimeo'})
>>> opener = urllib2.build_opener()
>>> f = opener.open(req)
>>> f.read() # this works
'[{"id":"38356","title":"Forgetfulness - Billy Collins Animated Poetry","description":"US Poet Laureate Billy Collins reads his poem ","url":"http:\\/\\/vimeo.com\\/38356","upload_date":"2006-01-24 15:21:03","thumbnail_small":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/47\\/74\\/thumbnail-4774968.jpg","thumbnail_medium":"http:\\/\\/80.media.vimeo.com\\/d1\\/5\\/46\\/85\\/thumbnail-4685118.jpg","thumbnail_large":"http:\\/\\/images.vimeo.com\\/87\\/39\\/873998\\/873998_640x480.jpg","user_name":"smjwt","user_url":"http:\\/\\/vimeo.com\\/smjwt","user_portrait_small":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.30.jpg","user_portrait_medium":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.75.jpg","user_portrait_large":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.100.jpg","user_portrait_huge":"http:\\/\\/bitcast.vimeo.com\\/vimeo\\/portraits\\/defaults\\/d.300.jpg","stats_number_of_likes":"281","stats_number_of_plays":"9173","stats_number_of_comments":23,"duration":"112","width":"320","height":"240","tags":"poetry, poet, online poetry, famous poet, video poetry, modern poetry, famous poem, poetry sites, poetry websites, audio poetry, american poet, animation clips, american poetry, free poetry sites, animation art, free poetry, animated clips, poem, poet laureate"}]'
>>> simplejson.load(f)
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/__init__.py", line 298, in load
parse_constant=parse_constant, **kw)
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/decoder.py", line 326, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.5/site-packages/django/utils/simplejson/decoder.py", line 344, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
내가 잘못 될 곳이 있습니까?
해결책
노력하다
f = opener.open(req)
simplejson.load(f)
F.Read ()를 먼저 실행하지 않고. f.read ()를 실행하면 파일 핸들의 내용이 무너 지므로 전화 할 때 아무것도 남지 않습니다. simplejson.load(f)
다른 팁
첫 번째 줄은 전체 파일을 읽습니다. 그런 다음 두 번째 줄은 파일에서 더 많은 것을 읽으려고하지만 남은 것은 없습니다.
>>> f.read() # this works
blah blah blah
>>> simplejson.load(f)
F.read () 선을 생략하거나 읽기에서 값을 저장하고 하중으로 사용하십시오.
json = f.read()
simplejson.loads(json)
더 쉬운 방법이 있습니다 - 당신은 전혀 SimpleJson이 필요하지 않습니다. Python은 true/false/null을 올바른 값으로 설정하는 한 Evat 문을 사용하여 JSON을 Dict/Array로 구문 분석 할 수 있습니다.
# fetch the url
url = "https://api.twitter.com/1/users/lookup.json?user_id=6253282,18949452"
json = urllib2.urlopen(url).read()
# convert to a native python object
(true,false,null) = (True,False,None)
profiles = eval(json)
제휴하지 않습니다 StackOverflow