Как получить JSON из cURL в виде массива в командном файле - PullRequest
0 голосов
/ 12 июня 2018

Привет, я очень новичок в пакетных файлах.Я пытаюсь сделать что-то похожее на мой bash-скрипт.Итак, вот моя проблема:

Я хочу получить все версии / теги из репозитория github, чтобы сгенерировать файл конфигурации для php documentor sami.Но как я могу записать JSON в переменную в пакетном режиме, чтобы получить версии?В моем bash-скрипте я сделал это, и он работает нормально:

function jsonDecode() {
    json=$1
    key=$2

    echo ${json} | jq -r ${key}
}

ghUser="MisterMarlu"
ghRepo="sentence"
json=$(curl "https://api.github.com/repos/${ghUser}/${ghRepo}/tags")
versions=$(echo "${json}" | jq -c ".[]")

for version in ${versions[@]}; do
    versionNumber=$(jsonDecode ${version} ".name")
    echo "    ->add( '${versionNumber}', '${versionNumber}' )" >> ${config}
done

# Here comes alot of code below this for loop..

Это выдаст «v0.0.1» и «v0.0.2».Шина, как я могу сделать это в командном файле?

РЕДАКТИРОВАТЬ
Вот ответ JSON, где мне нужен только "name" как массив:

[
  {
    "name": "v0.0.2",
    "zipball_url": "https://api.github.com/repos/MisterMarlu/sentence/zipball/v0.0.2",
    "tarball_url": "https://api.github.com/repos/MisterMarlu/sentence/tarball/v0.0.2",
    "commit": {
      "sha": "82c4b6d74cc16816104934114766f0328e77ee66",
      "url": "https://api.github.com/repos/MisterMarlu/sentence/commits/82c4b6d74cc16816104934114766f0328e77ee66"
    },
    "node_id": "MDM6UmVmMTMzMDM1MDMxOnYwLjAuMg=="
  },
  {
    "name": "v0.0.1",
    "zipball_url": "https://api.github.com/repos/MisterMarlu/sentence/zipball/v0.0.1",
    "tarball_url": "https://api.github.com/repos/MisterMarlu/sentence/tarball/v0.0.1",
    "commit": {
      "sha": "0cf1a83a51716da3f42915c9eab571166845bb0b",
      "url": "https://api.github.com/repos/MisterMarlu/sentence/commits/0cf1a83a51716da3f42915c9eab571166845bb0b"
    },
    "node_id": "MDM6UmVmMTMzMDM1MDMxOnYwLjAuMQ=="
  }
]

Ответы [ 2 ]

0 голосов
/ 07 января 2019

С Xidel это просто как:

xidel -s "https://api.github.com/repos/MisterMarlu/sentence/tags" -e "join($json()/name,',')"

Это выдает: v0.0.2,v0.0.1.

Чтобы экспортировать это как $config / %config%...
Bash:

eval "$(xidel -s "https://api.github.com/repos/MisterMarlu/sentence/tags" -e '
  config:=join(
    $json()/name,
    ","
  )' --output-format=bash
)"

Пакет:

FOR /F "delims=" %%A IN ('xidel.exe -s "https://api.github.com/repos/MisterMarlu/sentence/tags" -e ^"
  config:^=join^(
    $json^(^)/name^,
    '^,'
  ^)^" --output-format^=cmd
') DO %%A

или ...

FOR /F "delims=" %%A IN ('xidel.exe -s "https://api.github.com/repos/MisterMarlu/sentence/tags" -e "config:=join($json()/name,',')" --output-format=cmd') DO %%A
0 голосов
/ 12 июня 2018
  • Для обработки выходных данных другой программы вам необходим for /f
  • синтаксический анализ строк, отфильтрованных по findstr

:: Q:\Test\2018\06\12\SU_50811698.cmd
@Echo off & SetLocal EnableDelayedExpansion
Set "ghUser=MisterMarlu"
Set "ghRepo=sentence"
Set "Version="
For /f "tokens=1,2 delims=:, " %%U in ('
curl "https://api.github.com/repos/%ghUser%/%ghRepo%/tags" 2^>Nul ^| findstr /i "\"name\""
') do Set "Version=!Version!,%%~V"
If defined Version (set "Version=%Version:~1%") Else (Set "Version=n/a")
Set Version

Пример вывода:

> Q:\Test\2018\06\12\SU_50811698.cmd
Version=v0.0.2,v0.0.1

Вам известно, что пакет не имеет реальных массивов?

Просто альтернатива в PowerShell:

$ghUser="MisterMarlu"
$ghRepo="sentence"
$URL = "https://api.github.com/repos/$ghUser/$ghRepo/tags"
$Json=(curl.exe $URL)|ConvertFrom-json
$Json | Select name

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