通过Flask和cURL中的POST请求发送JSON数组

时间:2017-08-31 13:35:31

标签: python json curl flask

我的应用程序应接受来自JSON请求的数据,然后使用此数据进行一些计算。 我可以得到一个简单的字符串,但不能接受任何数组(这是非常重要的)。

@app.route('/calc', methods = ['POST'])
def add_entry():
    print("p0")
    request_json = request.get_json()
    cond = request_json.get('condition')
    f_arr = request_json.get('findings')
    return json.dumps(cond, f_arr)

curl -X POST -H "Content-Type: application/json" -d "{ \"condition\": \"Fibroadenoma\", \"findings\": \"['Mass', 'Special cases']\" }" http://localhost:8080/calc

但它不会返回任何数组。 我该如何解析它? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

两个问题:

json.dumps json.dumps需要一个项目进行编码,而不是参数项目列表。如果您需要同时返回它们,请将结果合并到一个新列表中并返回return json.dumps([cond, f_arr])

<强>引用

您正在传递一个字符串以查找结果。删除列表周围的引号,并将单引号更改为转义双引号

使用说明进行修改

让我们从你要传递给卷曲的数据参数开始

JoshJ:~ josh$ echo "{ \"condition\": \"Fibroadenoma\", \"findings\": \"['Mass', 'Special cases']\" }"
{ "condition": "Fibroadenoma", "findings": "['Mass', 'Special cases']" }

我在我的shell中使用echo来显示非转义字符串的样子

现在让我们看一下解析为json时字符串的样子

JoshJ:~ josh$ echo "{ \"condition\": \"Fibroadenoma\", \"findings\": \"['Mass', 'Special cases']\" }" | jq
{
  "condition": "Fibroadenoma",
  "findings": "['Mass', 'Special cases']"
}

这说明了我提到的问题,即由于双引号,您的findings列表实际上被解析为字符串。如果我是一个博彩人,我会说你的代码看到f_arr == "['Mass', 'Special cases']"时你真正想要的是f_arr = [u"Mass", u"Special cases"]

您可以通过将您的卷曲数据(-d值)更改为"{ \"condition\": \"Fibroadenoma\", \"findings\": [\"Mass\", \"Special cases\"] }"来更正此问题。

您可以在下面的示例中看到它已正确解析

JoshJ:~ josh$ echo "{ \"condition\": \"Fibroadenoma\", \"findings\": [\"Mass\", \"Special cases\"] }" | jq
{
  "condition": "Fibroadenoma",
  "findings": [
    "Mass",
    "Special cases"
  ]
}