这个问题有点重复,但是我找不到解决方案。 当我调用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
答案 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\"}"