JSONDecodeError期望值:第1行第1列(char 0)

时间:2017-09-04 23:16:07

标签: python django

我有一个项目,我正在努力,我需要,我正在尝试发送一个json请求。我收到一个错误,我不知道它与我要发送的请求有什么关系。

以下是错误:

JSONDecodeError at /setup_profile/
Expecting value: line 1 column 1 (char 0)
Request Method: POST
Request URL:    http://127.0.0.1:8000/setup_profile/
Django Version: 1.8.6
Exception Type: JSONDecodeError
Exception Value:    
Expecting value: line 1 column 1 (char 0)
Exception Location: C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\scanner.py in _scan_once, line 118
Python Executable:  C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\python.exe
Python Version: 3.6.1
Python Path:    
['C:\\Users\\OmarJandali\\Desktop\\opentab\\opentab',
 'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
 'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
 'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\lib',
 'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36',
 'C:\\Users\\OmarJandali\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']

以下是我要发送的请求:

def createUserSynapse(request):
    url = 'http://uat-api.synapsefi.com'
    headers = {
        'X-SP-GATEWAY' : 'client_id_asdfeavea561va9685e1gre5ara|client_secret_4651av5sa1edgvawegv1a6we1v5a6s51gv',
        'X-SP-USER-IP' : '127.0.0.1',
        'X-SP-USER' : '| ge85a41v8e16v1a618gea164g65',
        'Contant-Type' : 'application/json',
    }
    payload = {
        "logins":[
            {
                "email":"test@test.com",
            }
        ],
        "phone_numbers":[
            "123.456.7890",
            "test@test.com",
        ],
        "legal_names":[
            "Test name",
        ],
        "extras":{
            "supp_id":"asdfe515641e56wg",
            "cip_tag":12,
            "is_business":False,
        }
    }
    print(url)
    print(headers)
    print(payload)
    call = requests.post(url, json=payload, headers=headers)
    # response = json.loads(call.text)
    call = call.json()
    print (call)
    print(call.content)
    return render(request, 'tabs/create_user_synapse.html', call)

这是回溯,我认为错误将是call = call.json()命令的位置或者它上面的行与实际响应

Traceback Switch to copy-and-paste view

C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\django\core\handlers\base.py in get_response
                                response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
C:\Users\OmarJandali\Desktop\opentab\opentab\tab\views.py in profileSetup
                            createUserSynapse(request) ...
▶ Local vars
C:\Users\OmarJandali\Desktop\opentab\opentab\tab\views.py in createUserSynapse
                call = call.json() ...
▶ Local vars
C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\requests\models.py in json
                    return complexjson.loads(self.text, **kwargs) ...
▶ Local vars
C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\__init__.py in loads
                    return _default_decoder.decode(s) ...
▶ Local vars
C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\decoder.py in decode
                    obj, end = self.raw_decode(s) ...
▶ Local vars
C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\decoder.py in raw_decode
                    return self.scan_once(s, idx=_w(s, idx).end()) ...
▶ Local vars
C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\scanner.py in scan_once
                        return _scan_once(string, idx) ...
▶ Local vars
C:\Users\OmarJandali\AppData\Local\Programs\Python\Python36\lib\site-packages\simplejson\scanner.py in _scan_once
                        raise JSONDecodeError(errmsg, string, idx) ...
▶ Local vars

2 个答案:

答案 0 :(得分:2)

你的帖子请求返回b'Running!'无法转换为json。所以line:call = call.json()引发JSONDecodeError错误。

答案 1 :(得分:1)

基本问题是,您对API的调用似乎没有返回具有有效JSON的响应,因此当您调用该方法时,requests无法解析它,就像Muktadiur所说。

为了诊断这一点,你需要弄清楚什么是returend,即它是一个失败的响应,或者是你没有期望从API中的格式(所以可能content-type错字引起了API返回的方式与您预期的不同,例如)。

在交互式python会话中运行请求代码可能是值得的,像在Django视图中那样ping API,看看你实际上得到了什么。我建议curl更容易做到这一点,但我发现你处于Win环境中。

编辑:实际上,诊断此问题的最简单方法可能是让您在有问题的json调用之上调用print(call.content)。您还应该添加print(call.status_code)。这应该很快告诉你1)你实际上得到了什么,2)你正在获得什么HTTP状态代码。这应该有助于解决API调用带来的麻烦。