Py学习  »  Python

Python错误地从curl获取json列表

Batchen Regev • 5 年前 • 1594 次点击  

我使用python3,我向我的API发送一个POST curl请求:

curl --header "Content-Type application/json" --request POST --data '{"tags": "['a1','b2']"}'

我的API代码将其作为dict获取,但是如下所示:

data = request.get_data()
data = json.loads(data)
print(data["tags"])

日志>gt;[a1,b2]

"['a1','b2']"

因为我把它发送到ansible playbook

我在代码中尝试了一些操作,但是当代码将数据[“tags”]作为str而不是列表获取时,我不能。

我能做什么?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54320
 
1594 次点击  
文章 [ 3 ]  |  最新文章 5 年前
Roel Schroeven
Reply   •   1 楼
Roel Schroeven    5 年前

问题不在Python方面,甚至也不在curl方面;而是shell在将参数传递给curl之前如何解释命令行的问题。你可以看到如果你使用 echo curl :

echo '{"tags": "['a1','b2']"}'

输出:

{"tags": "[a1,b2]"}

不能简单地在由这些单引号分隔的字符串中使用单引号。我的第一个想法是避开单引号来解决这个问题,但我找不到办法。因此,我认为最好使用双引号作为字符串分隔符,并转义字符串中的双引号(带反斜杠),如下所示:

echo "{\"tags\": \"['a1','b2']\"}"

输出:

{"tags": "['a1','b2']"}

curl --header "Content-Type application/json" --request POST --data "{\"tags\": \"['a1','b2']\"}"

如果你问我的话,我觉得很麻烦,但我并没有马上找到更好的办法。

Alexander Pushkarev
Reply   •   2 楼
Alexander Pushkarev    5 年前

如果 data['tags'] 是一个字符串,我可以想到几种可能的解决方案:

  • 要添加的用户正则表达式 ' 一串
  • 在字符串上迭代,替换 [ [' , , ',' ] '] 在标签之间。
  • 如果可能的标记值已知-只需查找它们 在给定的字符串中

JasonLauHK
Reply   •   3 楼
JasonLauHK    5 年前

你想让控制台也打印出引号吗?

{"tags": "\"[\'a1\', \'b2\']\""}