具有JSON正文的Invoke-RestMethod

问题描述

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

w = Window.partitionBy("ID").orderBy(F.col("Date").cast('long')).rowsBetween(-4,0)

df \
.withColumn('hr1_ave',F.avg("rpm").over(w))\
.withColumn('hr1_std',F.stddev("rpm").over(w))\
.withColumn('hr1_min',F.min("rpm").over(w))\
.withColumn('hr1_max',F.max("rpm").over(w)) \
.show()

我的txt文件

$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"

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

'{
  "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"
      }
    ]
    }
  }
  '

我的第一个想法是,我的REST API对txt文件(json正文)开头和结尾的引号反应不佳。但是,如果我从txt文件删除引号,则Powershell会说以下话:

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
}

任何想法我该如何解决

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...