【问题标题】:Send a JSON array via POST request in Flask and cURL通过 Flask 和 cURL 中的 POST 请求发送 JSON 数组
【发布时间】:2017-08-31 13:35:30
【问题描述】:

我的应用程序应该接受来自 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

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

【问题讨论】:

  • 你有两个问题。首先是引用。第二个是json.dumps 不采用任意数量的参数进行编码。这就是为什么不返回 f_arr 的原因。我会更新我的答案以反映这一点

标签: python json curl flask


【解决方案1】:

两个问题:

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

引用

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

用解释编辑

让我们从传递给 curl 的数据参数开始

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"]

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

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

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

【讨论】:

  • 谢谢,但在这种情况下,它只是返回一个条件字符串,仅此而已。我需要以某种方式传递一个数组,因为我的函数稍后接受一个数组作为参数。 JSON支持数组,如何通过请求发送呢?
  • 我没有,它仍然不起作用,这就是我寻求帮助的原因。
  • @AliceJarmusch 查看我的更新答案。希望能解释一下
猜你喜欢
  • 2014-07-28
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多