Как добавить результаты веб-запроса в цикл while - PullRequest
0 голосов
/ 17 апреля 2019

Мне нужно вызвать API и просмотреть различные страницы возвращаемых результатов и добавить их все к одному объекту.

Я попробовал код ниже. Обычно += работает при добавлении к объекту powershell, но на этот раз не повезло.

Примечание: URI и Get - это функции, которые определены в другом месте. Они работают, как и ожидалось в другом месте кода.

$min=1
$max=2

while ($min -le $max){
    $url= URI "tasks?page=$min"
    $x=Get $url
    if($min=1){
        $response=$x
    }
    else{
        $response+=$x
    }

    $min=$min+1
}

Пример ответа (преобразован в JSON):

  "value": [
    {
      "task_id": 17709655,
      "project_id": 1928619,
      "start_date": "2019-04-11",
      "end_date": "2019-11-29",
      "start_time": null,
      "hours": 1.5,
      "people_id": 17083963,
      "status": 2,
      "priority": 0,
      "name": "",
      "notes": "",
      "repeat_state": 0,
      "repeat_end_date": null,
      "created_by": 331791,
      "modified_by": 0,
      "created": "2019-04-12 00:39:30.162",
      "modified": "2019-04-12 00:39:30.162",
      "ext_calendar_id": null,
      "ext_calendar_event_id": null,
      "ext_calendar_recur_id": null
    },
    {
      "task_id": 17697564,
      "project_id": 1928613,
      "start_date": "2019-10-08",
      "end_date": "2019-10-08",
      "start_time": null,
      "hours": 8,
      "people_id": 17083966,
      "status": 2,
      "priority": 0,
      "name": "",
      "notes": "",
      "repeat_state": 0,
      "repeat_end_date": null,
      "created_by": 327507,
      "modified_by": 0,
      "created": "2019-04-11 16:10:22.969",
      "modified": "2019-04-11 16:10:22.969",
      "ext_calendar_id": null,
      "ext_calendar_event_id": null,
      "ext_calendar_recur_id": null
    }
  ],
  "Count": 2
}```

1 Ответ

0 голосов
/ 17 апреля 2019

Если вы хотите, чтобы вывод был массивом, я написал бы ваш код следующим образом:

$min=1
$max=2

$response = foreach ($Page in $min..$max) {
    $url = URI "tasks?page=$Page"
    Get $url
}

Это обычно предпочтительный метод, потому что строки и массивы имеют фиксированную длину в .Net и, следовательно, PowerShell.

Здесь $response[0] должен быть первым ответом, $response[1] вторым и т. Д.

Если вышеприведенное не сработает, то я думаю, что вывод Get не является строкой.

Если вы ожидаете, что $response будет единственной допустимой строкой JSON, содержащей все ответы, тогда мой ответ: «JSON не работает таким образом». Вам нужно будет проанализировать каждый ответ JSON на объекты (подсказка: ConvertFrom-Json), объединить их, а затем, возможно, преобразовать их обратно в JSON (ConvertTo-Json). Обратите внимание, что нативный диалект .Net JSON не соответствует остальному диалекту JSON в Интернете, особенно с датами (хотя, похоже, ваши даты здесь являются строками). Возможно, вы захотите использовать JSON.Net, который, как я считаю, соответствует общему Интернет-диалекту.

Вы можете комбинировать $response так:

$CombinedResponse = '[' + ($response -join ',') + ']'

Но я не знаю, насколько хорошо это сработает, если вы попытаетесь разобрать это как JSON.

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