社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python错误地从curl获取json列表

Batchen Regev • 5 年前 • 1581 次点击  

我使用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
 
1581 次点击  
文章 [ 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\']\""}