如何使用批处理脚本提取json文件的url

时间:2019-05-18 09:14:13

标签: batch-file

我想从json文件中提取一个网址,然后使用批处理脚本将其存储到变量中。

下面是我的json文件。

 {
  "url": "https://api.github.com/repos/octocat/Hello-World/releases/1",
  "html_url": "https://github.com/octocat/Hello-World/releases/v1.0.0",
  "assets_url": "https://api.github.com/repos/octocat/Hello-World/releases/1/assets",
  "upload_url": "https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}",
  "tarball_url": "https://api.github.com/repos/octocat/Hello-World/tarball/v1.0.0",
  "zipball_url": "https://api.github.com/repos/octocat/Hello-World/zipball/v1.0.0",
  "id": 1,
  "node_id": "MDc6UmVsZWFzZTE=",
  "tag_name": "v1.0.0",
  "target_commitish": "master",
 }

我希望将"upload_url"{?name,label}"之间的行存储到变量中。

https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets

我可以获取批处理脚本命令来实现此目的吗?

我尝试了以下命令:

for /f "tokens=2 delims=:" %%# in (' type tmpCurl.json^|find /i "upload_url"') do echo %%#

但是它给出了很多输出:

"https

3 个答案:

答案 0 :(得分:1)

这应该是您所需要的:

@echo off
for /f "tokens=1,* delims=:" %%a in ('type tmpCurl.json ^| findstr /i "upload_url"') do (
    for /f "tokens=1,* delims={" %%i in (%%b) do set "result=%%i"
)
echo %result%

第一个循环在:分隔符上分割字符串,并将:之前的所有内容分配给元变量%%a,使您将下面的所有内容分配给%%b

https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets{?name,label}",

第二个循环在%%b上拆分字符串{并将{之前的所有内容分配给%%i,使我们拥有:

https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets

答案 1 :(得分:0)

根据您提供的.json内容,对于您的来说,这样的内容就足够了:

@For /F Tokens^=3Delims^={^"^  %%A In ('Find "upload_url"^<"tmpCurl.json"')Do @Set "UURL=%%A"
@Set UURL 2>Nul&Pause

第二行只是为了向您显示已保存的变量及其值。

答案 2 :(得分:0)

由于末尾第二行的逗号,您的示例Json无效。
更好地使用可以处理Json的Json工具/脚本语言。

PowerShell一个衬里​​分批包装

:: Q:\Test\2019\05\18\SO_56197577.cmd
@Echo off
For /f "Usebackq delims=" %%U in (`powershell -NoP -C ^
  "(Get-Content tmpCurl.json | ConvertFrom-Json).upload_url.split('{')[0]"
`) Do Set "upload_url=%%U"
set upload_url

样本输出

> Q:\Test\2019\05\18\SO_56197577.cmd
upload_url=https://uploads.github.com/repos/octocat/Hello-World/releases/1/assets