使用curl调用Bitbucket v1.0 API获取json文件时返回内容被lines封装,如何拿到原始json?
问题根因
你当前请求用的是browse路径的接口,这个接口是Bitbucket给前端代码预览页面设计的,返回的本来就是带分页、行号的结构化封装数据,从设计上就不提供原始文件流输出,所以才会出现外层嵌套lines、isLastPage这类额外字段的情况。
调整方法
更换正确的原始文件端点
把请求路径里的browse替换成raw——这是Bitbucket v1.0 API专门用来拉取仓库文件原始内容的端点,返回的就是和仓库里存储完全一致的纯文件内容,不会附带任何多余的元数据封装。
按需指定文件所在的分支
如果目标文件不在仓库默认分支上,要在请求URL后面拼上at查询参数,指定要拉取的分支、标签或者提交哈希,避免拉到默认分支上的旧版本文件。
去掉多余的请求头
原来请求里带的Content-Type: application/json是给POST、PUT这类带请求体的接口用的,GET请求拉文件的时候带这个头完全多余,还可能让接口误判返回格式,直接删掉就行。
可直接复用的curl命令
curl -k -s -X GET \ -H "Authorization: Bearer xyxyxyz" \ "https://code.somecompany.corp/bitbucket/rest/api/1.0/projects/<projectname>/repos/davinci-reviewer-list/raw/mapfile.json?at=refs/heads/main" \ --output mapfile.json
注意事项
- 别想着从
browse接口的返回结果里拼lines数组的text字段还原文件,这种方式既要处理特殊字符转义、换行还原的问题,碰到超过单页大小的大文件时,还会因为接口默认分页截断导致内容不全,没必要折腾。 - 如果目标文件就在仓库默认分支上,直接把URL里的
?at=refs/heads/main参数删掉就行,接口会自动从默认分支拉取。 - 拉取完成后直接cat查看文件,内容就是你预期的纯JSON结构,没有外层的封装字段。
内容的提问来源于stack exchange,提问作者Victor.Bbb
相关产品推荐
相关产品推荐

