【问题标题】:Invoke-RestMethod with JSON body使用 JSON 正文调用 RestMethod
【发布时间】:2023-04-05 00:28:02
【问题描述】:

我正在尝试编写一个 powershell 脚本(powershell 6 和 7),以从带有 JSON 正文的文本文件中进行 REST 调用 API。这是我的代码:

$uri = 'URI'
$json = Get-Content 'TXT_FILE_WITH_JSON_BODY' | Out-String | ConvertFrom-Json | ConvertTo-Json | %{[regex]::Unescape($_)}
$username = 'USER'
$password = 'PASSWORD'
$base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes(("{0}:{1}" -f $username,$password)))
Invoke-RestMethod -Method POST -SkipCertificateCheck -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} $uri -body $json -ContentType "application/json"

我的txt文件:

'{
  "apiversion": "3.0",
  "process": {
    "profileId": "ID",
    "jobType": "TYPE",
    "origin": "ORIGIN",
    "processWhileGrowing": true
  },
  "jobSource": {
    "sources": [
      {
        "uri": "\\\\\\\\10.22.6.250\\\\share\\\\test\\\\TEST01.mov"
      }
    ],
    "metadata": [
      {
        "name": "Description",
        "value": "Bla bla bla"
      },
      {
        "name": "title",
        "value": "Title"
      },
      {
        "name": "channel",
        "value": "SRV1"
      },
      ,
      {
        "name": "type",
        "value": "TYPE01"
      },
      {
        "name": "source",
        "value": "SOURCE01"
      }
    ]
    }
  }
  '

然后当我执行我的脚本时,我得到了这个:

PS F:\Desktop> .\test01.ps1
Invoke-RestMethod: F:\Desktop\test01.ps1:6
Line |
   6 |  Invoke-RestMethod -Method POST -SkipCertificateCheck -Headers @{Autho …
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | {
  "status": "HTTP_ERROR",
  "message": "SERVER_ERROR",
  "message_detail": null
}

我的第一个想法是我的 REST API 对我的 txt 文件(json 正文)开头和结尾的引用没有很好的响应。但是,如果我从 txt 文件中删除引号,Powershell 会显示以下内容:

PS C:\Users\Brice> F:\Desktop\jsonconvert.ps1
ConvertFrom-Json : Invalid JSON primitive: .
At F:\Desktop\jsonconvert.ps1:1 char:63
+ ... nt 'F:\Desktop\1.txt' | Out-String | ConvertFrom-Json | Conve ...
+                                                  ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
    + FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand

知道如何解决这个问题吗?

【问题讨论】:

  • 确实 需要删除整个 json 文件周围的单引号,但您在 metadata 部分的行中也有一个悬空的逗号,只是在"value": "SRV1" 之后 - 删除它,它应该解析json ok。如果您在具有语法突出显示的 json 感知文本编辑器/IDE 中打开文件,您可以很容易地找到此类问题...
  • 感谢您的回答,我实际上在发布后就看到了错误,并删除了多余的逗号,但我的工作并没有更好。这是没有元数据字段、额外逗号和简单引号的新 txt 文件:link 现在我的问题是从 json txt 文件转换在 Powershell 中效果不佳。我的身体是这样的:link 你可以看到格式不对在第 11 行...
  • 所以显然我的问题是我在 TXT 文件中的括号,Powershell 似乎可以转换它们,我需要保持原样。
  • 用 ConvertTo-Json -Depth 5 修复它
  • 这样解决了吗?

标签: json powershell api rest invoke-restmethod


【解决方案1】:

通过删除txt文件中的简单引号并将以下内容添加到我的代码ConvertTo-Json -Depth 5来解决

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2021-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多