为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

阿晨1998 2019-11-25 15:38:03
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)
查看完整描述

3 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

总结评论中的对话:


无需使用simplejson库,Python作为json模块包含了相同的库。


无需解码从UTF8到unicode的响应,simplejson/ json .loads()方法可以本地处理UTF8编码的数据。


pycurl有一个非常古老的API。除非您有特定的使用要求,否则会有更好的选择。


requests提供最友好的API,包括JSON支持。如果可以,将您的通话替换为:


import requests


return requests.get(url).json()


查看完整回答
反对 回复 2019-11-25
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

检查响应数据主体,是否存在实际数据并且数据转储的格式是否正确。


在大多数情况下,您的json.loads- JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误是由于:


非JSON引用

XML / HTML输出(即以<开头的字符串),或

不兼容的字符编码

最终,错误告诉您字符串在第一位置已经不符合JSON。


因此,如果尽管乍一看具有看起来像JSON的数据主体,但解析仍然失败,请尝试替换数据主体的引号:


import sys, json

struct = {}

try:

  try: #try parsing to dict

    dataform = str(response_json).strip("'<>() ").replace('\'', '\"')

    struct = json.loads(dataform)

  except:

    print repr(resonse_json)

    print sys.exc_info()

注意:数据中的引号必须正确转义


查看完整回答
反对 回复 2019-11-25
  • 3 回答
  • 0 关注
  • 1953 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信