尝试从Powershell调用GitHub RestApi调用以创建Git树并获取“问题解析JSON”

时间:2019-03-04 10:29:21

标签: rest api powershell github

我正在进行如下呼叫,并收到“问题解析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}  

我试图执行github API文档https://developer.github.com/v3/git/trees/#create-a-tree中提到的api,并在提交那些更改之前创建一棵树。

我的要求是修改多个文件并一次性提交更改,因此我将不能依赖https://developer.github.com/v3/repos/contents/#create-a-file中提到的Content API。

当我尝试执行前面提到的代码片段时,我得到了错误。

  

“消息”:“解析JSON问题”

我知道在Body的content属性中,我正在提供脚本,其中包含换行符,双引号,单引号等我们需要做什么来签入类似脚本?

我已经注意到,即使我们在内容中提供了一个换行符,它也会因相同的错误而失败。即使是Rest Api也不会采用任何以64为基数的字符串。提供base64编码的字符串后,Api调用将正确执行,但我们正在使用编码的字符串创建树。这是不可取的。

高度赞赏API或powershell中的任何建议或解决方法。 预先感谢。

1 个答案:

答案 0 :(得分:0)

我建议您使用here-string写出JSON块,并消除所有反引号以免引号引起来。 这样,更容易发现它是否为有效的json。

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

使用JSONLint之类的在线JSON验证程序来检查它是否确实是有效的json。

JSON不使用注释行;都是数据。