JSON:无法解组字符串



我正在尝试使用Rest API,但当我查询时,我收到了以下我不理解的错误,我试图在这里查看类似的问题,但它们都是非常特殊的情况。这是我使用的代码

$oAuth2TokenUrl = "https://api.cloudflare.com/client/v4/graphql"
$accessKey = '1234'
$Cloudflare_Oauth_Header = @{
"X-AUTH-EMAIL" = "bryan";
"X-AUTH-KEY" = "$accessKey";
"Content-type" = "application/json"
}
$query = '"query": "{
viewer {
zones(filter: {zoneTag: "1234"}) {
httpRequests1mGroups(orderBy: [datetimeMinute_ASC], limit: 1000, filter: {datetime_geq: "2020-05-07T10:00:00Z", datetime_lt: "2020-05-07T10:10:00Z"}) {
dimensions {
datetimeMinute
}
sum {
browserMap {
pageViews
uaBrowserFamily
}
}
uniq {
uniques
}
}
}
}
} "' | ConvertTo-Json    
$Cloudflare_zone = Invoke-RestMethod -Uri $oAuth2TokenUrl -Method POST -Headers $Cloudflare_Oauth_Header -Body $query -ContentType 'application/json'

因此,一旦我检查了$Cloudflare_zone的内容,就会打印以下

{@{message=failed to recognize JSON request: 'json: cannot unmarshal string into Go value of type graphql.httpPostBody'; path=; extensions=}}

错误显示"json:无法将字符串解组为graphql.httpPostBody"类型的Go值.

这可以归结为"无法解析您发送的JSON字符串"。毫无疑问,您的JSON字符串是无效的。

当您拆分它时,它变得更容易处理:一个带有GraphQL的字符串变量,一个带有请求主体的PowerShell哈希表。然后可以将哈希表转换为JSON进行传输。

$graphQL = '{
# whatever (note the single quotes, so any double quotes in here can stay unescaped)
}'
$header = @{
"X-AUTH-EMAIL": "bryan"
"X-AUTH-KEY": "$accessKey"
}
$body = @{
query: $graphQL
# potentially other parameters that are not part of the GraphQL
}
$Cloudflare_zone = Invoke-RestMethod `
-Uri "https://api.cloudflare.com/client/v4/graphql" `
-Method POST `
-Headers $Cloudflare_Oauth_Header `
-Body ($body | ConvertTo-Json) `
-ContentType 'application/json; charset=utf-8'

注:

  • 我使用了换行符(通过用反引号转义换行符(来分解行,以提高可读性
  • 一般来说,显式指定字符集是个好主意,而不是让Invoke-RestMethod随心所欲
  • 您应该将所有这些转换为PowerShell函数以便于重用

最新更新