Повторите ответ JSON из API в Powershell

#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']@