Попытка вызова GitHub RestApi из Powershell для создания Git Tree и получения сообщения «Проблемы с анализом JSON» - PullRequest
0 голосов
/ 04 марта 2019

Я звоню следующим образом и получаю сообщение об ошибке «Проблемы с синтаксическим анализом JSON».

    $pair = "XXXX:XXXXXXXXXXXXXXXXXXXXXXXX"
    $bytes = [System.Text.Encoding]::ASCII.GetBytes($pair)
    $base64 = [System.Convert]::ToBase64String($bytes)
    $basicAuthValue = "Basic $base64"
    $Body="{
  `"base_tree`": `"2267699d5ea2a632c625693ceef5f7b77b2cda74`",
  `"tree`": [
    {
      `"path`": `"synthetics/MyAccount-MakeAPayment.js`",
      `"mode`": `"100644`",
      `"type`": `"blob`",
      `"content`" : `"require('new-relic-synthetics-manager');
         //----- Add synthetic code below this line
        //////////MORE CODE HERE TO CHECKIN///////////`"
    }
  ]
}"
    Invoke-RestMethod -Method Post -Uri "https://api.github.com/repos/MYORGANISATION/Test/git/trees" -Body $Body -Headers @{Authorization = $basicAuthValue}  

Я пытался выполнить API, упомянутый в документации API github https://developer.github.com/v3/git/trees/#create-a-tree, и создатьдерево до совершения этих изменений.

Мое требование - изменить несколько файлов и зафиксировать изменения за один раз, чтобы я не смог рассчитывать на упоминание Content API в https://developer.github.com/v3/repos/contents/#create-a-file.

Когда я пытаюсь выполнить упомянутый фрагмент кода, упомянутыйранее я получаю сообщение об ошибке.

"message": "Проблемы с синтаксическим анализом JSON"

Я знаю, что в свойстве содержимого тела я предоставляю сценарии и который содержит символ новой строкисимволы, двойные кавычки, одинарные кавычки и т. д. Что нужно сделать для проверки сценариев подобного типа?

Я заметил, что даже если мы предоставляем один символ новой строки в контенте, он завершается с той же ошибкой.Даже Rest Api не принимает никакой строки в кодировке 64.При предоставлении строки в кодировке base64 вызов Api выполняется без ошибок, но мы получаем дерево, созданное с помощью кодированной строки.Что нежелательно.

Будем весьма благодарны за любые предложения или обходные пути в API или PowerShell.Заранее спасибо.

1 Ответ

0 голосов
/ 04 марта 2019

Я бы предложил вам записать свой блок JSON с помощью here-string и избавиться от всех обратных кавычек, чтобы избежать кавычек.Таким образом, гораздо легче определить, является ли он действительным JSON или нет.

$Body= @"
{
    "base_tree": "2267699d5ea2a632c625693ceef5f7b77b2cda74",
    "tree": [{
        "path": "synthetics/MyAccount-MakeAPayment.js",
        "mode": "100644",
        "type": "blob",
        "content": "require('new-relic-synthetics-manager')"
    }]
}
"@

Используйте онлайн-валидатор JSON, такой как JSONLint , чтобы проверить, действительно ли это действительно json.

JSON не использует строки комментариев;это все данные.

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