programing

url을 통해 json 데이터를 가져와 python(simplejson)에서 사용

newstyles 2023. 2. 28. 23:20

url을 통해 json 데이터를 가져와 python(simplejson)에서 사용

간단한 답변이 필요할 것 같습니다만, 고민하고 있습니다.(json을 출력하는) URL을 가져와서 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)

더 쉬운 방법이 있다 - 당신은 전혀 단순하지 않다.올바른 값으로 true/false/null을 설정하면 Python은 eval 문을 사용하여 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)

언급URL : https://stackoverflow.com/questions/1640715/get-json-data-via-url-and-use-in-python-simplejson