'错误':'JSON解析错误-预期值:第1行第1列(字符0)'如何解决此问题

时间:2018-10-23 08:49:33

标签: python-3.x request

我正在编写一个脚本,以从不同的Web服务发出请求。从下面的json数据发布数据时出现问题。当我运行 patient_create_bill()功能我从响应中获取以下日志。

RESPONSE IS!!!!!
{'Error': 'JSON parse error - Expecting value: line 1 column 1 (char 0)'}
DEBUG:urllib3.connectionpool:Starting new HTTP connection (1): 0.0.0.0:9000
DEBUG:urllib3.connectionpool:http://0.0.0.0:9000 "POST /api/bill/patient/bills/ HTTP/1.1" 400 72
Creating Patient Bill .....................................

我尝试在发给POST的邮递员上发一个201,这意味着有效负载没有问题。 enter image description here

这是我的POST负载。
我有一个名为mocks.py的单独文件,其中包含 有PATIENT_BILL_CREATE_PAYLOAD

PATIENT_BILL_CREATE_PAYLOAD = {
    "bill_items": [{
        "item": "Syringes",
        "qty": 2,
        "description": "Medicorp syringes"
    }],
    "bill_services": [{
        "service": "Diagnosis",
        "service_type": "1",
        "duration": 5,
        "description": "diagnosis"
    }],
    "client": "Sandra Hernandez"
}

这是函数
我已经导入了PATIENT_BILL_CREATE_PAYLOAD,并在此函数中使用了它。

def patient_create_bill(headers):
    """This function uses login creds provided and returns token plus logged in user data."""
    url = "http://0.0.0.0:9000/api/bill/patient/bills/"
    data = PATIENT_BILL_CREATE_PAYLOAD
    res = requests.post(url, data=data, headers=headers)
    res_data = res.json()
    print("Creating Patient Bill .....................................\n")
    return res_data

3 个答案:

答案 0 :(得分:0)

此日志告诉您未收到HTTP响应(HTTP CODE 400)中的正文: DEBUG:urllib3.connectionpool:http://0.0.0.0:9000 "POST /api/bill/patient/bills/ HTTP/1.1" 400 72

Python尝试解析emtry字符串。 您可以运行以下命令:

import json
json.loads('')

此代码将引发:

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

我认为,您应该检查要呼叫的URL端点。

答案 1 :(得分:0)

我的错误是因为在请求中使用数据而不是json,并且还将标头<div class="entry-content wzt-editable" data-content_type="content" contenteditable="false"> 指定为`application / json:-)。

答案 2 :(得分:0)

您自己的答案是正确的(将您的数据编码为 json),这里是已修复的代码。这对我有用:

代替

res = requests.post(url, data=data, headers=headers)

正确的写法是...

import json

...

res = requests.post(url, data=json.dumps(data), headers=headers)

# or

res = requests.post(url, json=data, headers=headers)

有关 requests library docs 中此类请求的更多信息。