#json #powershell
#json #powershell
Вопрос:
Это довольно сложно, потому что ответ API должен быть в формате JSON, однако, если я пытаюсь получить доступ к свойству, оно возвращает null
PS C:Usersbryanar> $response.ClientASN
Затем я проверил тип ответа
PS C:Usersbryanar> $response.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String System.Object
Если я попытаюсь подойти к объекту по-другому, я даже получу ошибку, которая должна означать, что переменная не является объектом JSON
At line:1 char:20
$response| ConvertFrom-Json | Select ClientASN
~~~~~~~~~~~~~~~~
CategoryInfo : NotSpecified: (:) [ConvertFrom-Json], ArgumentException
FullyQualifiedErrorId : System.ArgumentException,Microsoft.PowerShell.Commands.ConvertFromJsonCommand
Поэтому я говорю PowerShell сделать это, но даже тогда я получаю нулевое значение
$response= Invoke-RestMethod `
-Uri "https://api.cloudflare.com/client/v4/zones/$zoneID/logs/received?start=$startDateamp;end=$endDateamp;fields=$fields" `
-Method GET `
-Headers $header `
-ContentType 'application/json; charset=utf-8' | ConvertTo-Json
PS C:Usersbryanar> $response| ConvertFrom-Json | Select ClientASN
ClientASN
---------
Это то, что $response
отображается, когда я печатаю его в консоли
{"ClientASN": 8075,"ClientCountry": "us","ClientIP": "0.0.0.0"}
{"ClientASN": 7545,"ClientCountry": "au","ClientIP": "0.0.0.0"}
{"ClientASN": 8075,"ClientCountry": "us","ClientIP": "0.0.0.0"}
{"ClientASN": 7545,"ClientCountry": "au","ClientIP": "0.0.0.0"}
Ответ №1:
Добавление некоторых круглых скобок работает, не уверен почему. Что-то связанное с обработкой данных перед отправкой их в Select
канал. Те, кто более осведомлен, должны быть в состоянии объяснить очень конкретную причину.
$JSON = @'
[{
"ClientASN": 8075,
"ClientCountry": "us",
"ClientIP": "0.0.0.0"
},
{
"ClientASN": 8075,
"ClientCountry": "us",
"ClientIP": "0.0.0.0"
},
{
"ClientASN": 8075,
"ClientCountry": "us",
"ClientIP": "0.0.0.0"
},
{
"ClientASN": 7545,
"ClientCountry": "au",
"ClientIP": "0.0.0.0"
}
]
'@
($JSON | ConvertFrom-Json) | select ClientASN
Комментарии:
1. Что ж, это помогает, но как я могу преобразовать ответ API, чтобы у меня было что-то вроде
$response = @'[$response']@