Tôi gặp lỗi Expecting value: line 1 column 1 (char 0)
khi cố gắng giải mã JSON.
URL tôi sử dụng cho lệnh gọi API hoạt động tốt trong trình duyệt, nhưng đưa ra lỗi này khi được thực hiện thông qua yêu cầu cuộn tròn. Sau đây là mã tôi sử dụng cho yêu cầu curl.
Lỗi xảy ra tại return simplejson.loads(response_json)
response_json = self.web_fetch(url)
response_json = response_json.decode('utf-8')
return json.loads(response_json)
def web_fetch(self, url):
buffer = StringIO()
curl = pycurl.Curl()
curl.setopt(curl.URL, url)
curl.setopt(curl.TIMEOUT, self.timeout)
curl.setopt(curl.WRITEFUNCTION, buffer.write)
curl.perform()
curl.close()
response = buffer.getvalue().strip()
return response
Trac trở lại đầy đủ:
Tìm lại:
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/nab/Desktop/pricestore/pricemodels/views.py" in view_category
620. apicall=api.API().search_parts(category_id= str(categoryofpart.api_id), manufacturer = manufacturer, filter = filters, start=(catpage-1)*20, limit=20, sort_by='[["mpn","asc"]]')
File "/Users/nab/Desktop/pricestore/pricemodels/api.py" in search_parts
176. return simplejson.loads(response_json)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/__init__.py" in loads
455. return _default_decoder.decode(s)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in decode
374. obj, end = self.raw_decode(s)
File "/Users/nab/Desktop/myenv2/lib/python2.7/site-packages/simplejson/decoder.py" in raw_decode
393. return self.scan_once(s, idx=_w(s, idx).end())
Exception Type: JSONDecodeError at /pricemodels/2/dir/
Exception Value: Expecting value: line 1 column 1 (char 0)
simplejson
khi bạn chỉ có thể sử dụng stdlib json
( cùng thư viện vớisimplejson
)?
web_fetch()
gọi của bạn không thành công.
pycurl
. requests
cung cấp một API dễ dàng hơn nhiều, đặc biệt là khi gỡ lỗi những gì đang diễn ra. Trừ khi bạn đặc biệt phải có một phiên bản mới hơn của simplejson
thư viện, chỉ cần gắn bó json
, tiết kiệm cho bạn một sự phụ thuộc để quản lý.
response_json
giá trị trả về của .json()
? Sau đó, bạn đã có dữ liệu được giải mã và không cần sử dụng json.loads()
nữa. response
giải mã nó cho bạn.
print repr(response_json)
nói với bạn đang được truyền đến.loads()
?