Как извлечь URL из файла JSON, используя пакетный скрипт - PullRequest
0 голосов
/ 18 мая 2019

Я хочу извлечь URL из файла 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 ]

1 голос
/ 18 мая 2019

Это должно быть то, что вам нужно:

@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%

Первый цикл разбивает строку на : delimeter и присваивает все до : метавариабельной переменной %%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
0 голосов
/ 18 мая 2019

Ваш образец 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
0 голосов
/ 18 мая 2019

Исходя из предоставленного вами .json содержимого, что-то подобное может быть достаточным для вашего :

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

Там, где находится вторая строка, просто чтобы показать вам сохраненную переменную с ее значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...