无法解码JSON对象:预期值:第1行第1列(字符0)<p> </p>

时间:2019-02-01 04:00:21

标签: json python-3.x curl flask

这个问题有点重复,但是我找不到解决方案。 当我调用flask应用程序并传递JSON数据时,出现错误:

"Failed to decode JSON object: Expecting value: line 1 column 1 (char 0)</p>"

以下是烧瓶代码:

@app.route('/data_extraction', methods=['POST'])
def check_endpoint2():   
    data= request.json()
    result = data['title']
    out={"result": str(result)}
    return json.dumps(out)
    #return 'JSON Posted'

这就是我从curl调用它的方式

curl -i -H "Content-Type: application/json" charset=utf-8 -X POST -d '{"title":"Read a book"}' 127.0.0.1:5000/data_extraction

我还想知道如何卷曲JSON文件(test_data.json),像这样吗?

curl -i -H "Content-Type: application/json" charset=utf-8 -X POST -d @test_data.json 127.0.0.1:5000/data_extraction

5 个答案:

答案 0 :(得分:0)

短语“ charset = utf-8”应位于“ Content-Type”标题中,如下所示: “内容类型:application / json; charset = utf-8”

答案 1 :(得分:0)

您几乎在那里。问题是-d会覆盖您提供的Content-Type标头。尝试使用--data而不是-d

然后将data = request.json()更改为data = request.json

答案 2 :(得分:0)

也许您不应该将Content-Type设置为application / json,将其取消并重试。 我遇到了与您相同的问题,我就这样解决了。

答案 3 :(得分:0)

我在Pytest中遇到过,解决方法是

import json

def test_login():
   payload = {"ecosystem":'abc'}
   accept_json=[('Content-Type', 'application/json;')]
   response = client.post('/data_extraction'), data=json.dumps(payload), headers=accept_json)

   assert response.data == {'foo': 'bar'}

答案 4 :(得分:0)

我知道这个问题有点老,但无论如何,JSON 中的双引号必须用反斜杠转义。因此,请求应该类似于:

curl -X POST http://127.0.0.1:5000/ -H "Content-Type: application/json" -d "{\"Name\":\"Nada\",\"Address\":\"my_address\"}"

因此,您的请求可能看起来像

curl -X POST 127.0.0.1:5000/data_extraction -H "Content-Type: application/json" -d "{\"title\":\"Read a book\"}"