如何在json中使用空格卷曲

当使用curl进行POST调用时,我无法正确传递JSON数据。 该字符串在第一个空格/空格处被切断。

我的电话看起来像这样,我通过一个有两个参数的PowerShell脚本执行。 使用这些参数我连接用于该调用的JSON。

我输入例如854e-ae7686fbc75a 365作为参数

# usage: powershell -file send.ps1 [apitoken] [interval]

param (
    [string]$apitoken = "",
    [int]$startInterval = "365"
)

$AUTHORIZATION = $apitoken
$STARTDATE = (Get-Date).AddDays(-$startInterval)
$ENDDATE = (Get-Date)
$JSON = '{"ApiToken":"' + $AUTHORIZATION + '",' +
    '"StartDate":"' + $STARTDATE + '",' +
    '"EndDate":"' + $ENDDATE + '",' +
    '"Type":"SalesExport"' +
    '}'

$CURLEXE = '..bincurl.exe'
$CurlArgument = '-X', 'POST',
                '-m', 7200,
                '-H', '"Content-Type:application/json"',
                '-d', $JSON,
                'https://my.server/export/sales'

& $CURLEXE @CurlArgument

STARTDATE将是当前日期减去365天。 ENDDATE将是当前日期。

问题是只要JSON变量curl中有空格(或可能有空白),就认为JSON已结束,并表示JSON未终止。 如果我用单引号或双引号括住变量,则没有区别。

即使空白在两个DateTime变量中的一个里面,也会出现问题!

我如何正确格式化JSON以便它可以包含空格?


不直接回答您的问题,但是由于您无论如何都使用PowerShell:为什么不使用本机Invoke-WebRequest而不是外部命令?

$today   = (Get-Date).Date
$uri     = 'https://example.org/export/sales'
$headers = @{
    'Content-Type' = 'application/json'
}
$data    = @{
    'ApiToken'  = $apitoken
    'StartDate' = $today.AddDays(-$startInterval).ToString('d')
    'EndDate'   = $today.ToString('d')
    'Type'      = 'SalesExport'
} | ConvertTo-Json

Invoke-WebRequest -Method Post -Headers $headers -Body $data -Uri $uri

或者,您可以将JSON数据定义为多行字符串:

$startDate = $today.AddDays(-$startInterval).ToString('d')
$endDate   = $today.ToString('d')
$data = @"
{
    "ApiToken": "$apitoken",
    "StartDate": "$startDate",
    "EndDate": "$endDate",
    "Type": "SalesExport"
}
"@
链接地址: http://www.djcxy.com/p/48621.html

上一篇: How use curl with spaces in json

下一篇: Double / Single Quotes in cURL Windows