JSONDecodeError:预期值:第1行第1列(字符0)

Expecting value: line 1 column 1 (char 0)尝试解码JSON 时出现错误。


我用于API调用的URL在浏览器中可以正常工作,但是通过curl请求完成时会出现此错误。以下是我用于curl请求的代码。


错误发生在 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

完整回溯:


追溯:


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)


阿晨1998
浏览 1954回答 3
3回答

胡子哥哥

总结评论中的对话:无需使用simplejson库,Python作为json模块包含了相同的库。无需解码从UTF8到unicode的响应,simplejson/ json .loads()方法可以本地处理UTF8编码的数据。pycurl有一个非常古老的API。除非您有特定的使用要求,否则会有更好的选择。requests提供最友好的API,包括JSON支持。如果可以,将您的通话替换为:import requestsreturn requests.get(url).json()

繁华开满天机

检查响应数据主体,是否存在实际数据并且数据转储的格式是否正确。在大多数情况下,您的json.loads- JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误是由于:非JSON引用XML / HTML输出(即以<开头的字符串),或不兼容的字符编码最终,错误告诉您字符串在第一位置已经不符合JSON。因此,如果尽管乍一看具有看起来像JSON的数据主体,但解析仍然失败,请尝试替换数据主体的引号:import sys, jsonstruct = {}try:&nbsp; try: #try parsing to dict&nbsp; &nbsp; dataform = str(response_json).strip("'<>() ").replace('\'', '\"')&nbsp; &nbsp; struct = json.loads(dataform)&nbsp; except:&nbsp; &nbsp; print repr(resonse_json)&nbsp; &nbsp; print sys.exc_info()注意:数据中的引号必须正确转义
打开App,查看更多内容
随时随地看视频慕课网APP