如何在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