json - 具有/JSON正文的Powershell Invoke-Webrequest-无法反序列化吗?

标签 json powershell

我需要使用特定格式的主体执行Invoke-Webrequest,才能将设备添加到产品中。这是json中的样子(直接来自供应商文档的示例):

$body_json = '{"datasource": [{
            "parentId": "123456789000",
            "name": "(name)",
            "id": "(value)",
            "typeId": 0,
            "childEnabled": false,
            "childCount": 0,
            "childType": 0,
            "ipAddress": "(ipAddress)",
            "zoneId": 0,
            "url": "(url)",
            "enabled": false,
            "idmId": 123456789000,
            "parameters": [{
                "key": "(key)",
                "value": "(value)"
            }]
        }]}'

当我尝试以json表示形式提交此消息时,出现以下错误:

Invoke-WebRequest : Can not deserialize instance of com.vendor.etc.DataSourceDetail out of START_ARRAY token at [Source: java.io.StringReader@22c614; line: 1, column: 1] At C:\powershell_script_location\ps.ps1:114 char 9 + $request = Invoke-WebRequest $url -Method Post -Headers $headers -Body $body_json - ... +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebException + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand



问题出在“参数”参数的格式上,因为省略“参数”后请求可以很好地提交,但是随后
我要添加的设备缺少重要的参数详细信息。
Invoke-WebRequest, JavaScriptSerializer,出问题了吗
供应商的代码,或者这是用户错误?让我知道是否需要澄清。

不幸的是,我不知道com.vendor.etc.DataSourceDetail实例的样子,因为我正在使用API​​,但无法直接访问它。

最佳答案

使用Invoke-RestMethod而不是Invoke-WebRequest

如果将主体作为字符串使用,请使用:

Invoke-RestMethod -Uri http://your-url.com -Method POST -Body $body_json -ContentType "application/json"   

如果必须根据数据/参数构造主体,则构建哈希表并将其通过ConvertTo-Json转换为json可能会更容易:
$body_json = @{
    datasource = @(
        @{
            parentId = 123456789000
            name = "name"
            id = "value"
            typeId = 0
            childEnabled = $false
            childCount = 0
            childType = 0
            ipAddress = "ipAddress"
            zoneId = 0
            url = "url"
            enabled = $false
            idmId = 123456789000
            parameters = @( @{
                key = "key"
                value = "value"
            })
       })} | ConvertTo-Json -Depth 4

Invoke-RestMethod -Method 'Post' -Uri http://your-url.com -Body $body_json -ContentType "application/json"

关于json - 具有/JSON正文的Powershell Invoke-Webrequest-无法反序列化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50649349/

相关文章:

java - Powershell 与 Batch - Java 命令行

python 3 : Identify if a python script is executed by bash or powershell

windows - 净用户 $userName/domain

powershell - PowerShell 中的特殊字符 "!"是什么意思?

json - 使用 Go 通过 HTTP 发送连续数据

ios - 调用中的额外参数 'error'

java - 值 <html><head>&lt;title&gt;java.lang.String 类型的 Apache 无法转换为 JSONObject

json - Jmeter不以POST方式发送JSON数据

javascript - 使用nodejs和cointicker将数据保存到json

powershell - 找不到接受参数的位置参数