首页 > 解决方案 > 你如何编码 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 方法尝试了解它是如何构建请求的主体的。当它覆盖到字节数组时,它似乎正在正确处理单引号。

标签: jsonencodingwiql

解决方案


想通了:request.post() 将字典对象作为 json 参数而不是 json 字符串。


推荐阅读