json - 你如何编码 WIQL JSON?
问题描述
在 Postman 中,我可以毫无问题地向我们的 Azure DevOps 2019 服务器提交查询:
POST https://<AZDOSERVER>/<COLLECTION>/<PROJECT>/<TEAM>/_apis/wit/wiql?api-version=5.0
{"query": "Select [System.Id] From WorkItems WHERE [System.AreaPath] UNDER '<AREANAME>'"}
但是,当我在 Python 中执行此操作时,我的 AREANAME 周围的单引号似乎遇到了编码问题。这是我的代码:
url = "https://<AZDOSERVER>/<COLLECTION>/<PROJECT>/<TEAM>/_apis/wit/wiql?api-version=5.0"
json = '{"query": "Select [System.Id] From WorkItems WHERE [System.AreaPath] UNDER '
+ "'<AREANAME>'" + '" }'
headers = {'Accept': 'application/json; api-version=5.0'}
response = request.post(url, json=json, auth=self.basicauth, headers=headers)
我收到 400 错误并显示以下消息:
b'{"count":1,"value":{"Message":"Error converting value \\"{\\"query\\":
\\"Select [System.Id] From WorkItems WHERE [System.AreaPath] UNDER \'<AREANAME>\'\\" }\\"
to type \'Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.Wiql\'. Path \'\',
line 1, position 92.\\r\\n"}}'
我应该如何将 JSON 正确传递到 python request.post() 方法中,以便以正确的编码发送它?我尝试通过 Fiddler 捕获我的出站请求,但它没有看到 python 流量。我也在安装 Wireshark,但这需要一段时间。我还通过 request.post 方法尝试了解它是如何构建请求的主体的。当它覆盖到字节数组时,它似乎正在正确处理单引号。
解决方案
想通了:request.post() 将字典对象作为 json 参数而不是 json 字符串。
推荐阅读
- laravel - 如何将 where() 用于属于 with() 的列
- jquery - 遍历 JSON 对象以在 jquery 中将值添加到 FormData
- javascript - Onclick 应该创建链接并打开它
- c# - 如何在 WPF DataGrid 的一行中显示几个项目的列表?
- c# - 如何在创建的网格视图行上禁用 asp.net 按钮
- javascript - jQuery-Ajax 创建的 Checkboxlist 不响应点击
- python - 清除特定频道 on_load 中的所有消息
- vb.net - How do I correctly use the OpenWriteAsync method to POST a file to an URL?
- google-apps-script - 重置复选框并删除已定义工作表上的注释
- ios - image not found while webrtc framework implement