JSON для powershell

#json #powershell

#json #powershell

Вопрос:

** Ребята, мне сказали: «В теле вашего сообщения вы не передаете друзей в виде массива», фактический JSON: как только я переведу этот JSON в формат powershell, я планирую вызвать запрос get, как показано ниже.

 {"friends":[{"friendId":"abc1234-456Yes-repeat"}],"wowMorefriends":{"morefriendsId":{"hmmmMoreFriendsId":"09876tyuhtre-repeated"}},"callMe":0,"param":{}}
  

Powersellcode:

 $Data = @{

    friends = @{"friendId" = "abc1234-456Yes-repeat"}

    wowMorefriends = @(

            @{

"morefriendsId" = @{"hmmmMoreFriendsId" = "09876tyuhtre-repeated"}

            "callMe" = 0

            "param" = {}

            }

        )

    }

   

 

$JsData = $Data | ConvertTo-Json -Compress



$JsData





Invoke-WebRequest -Method Post -Uri "https://App1.Callingmyfriends.com/api/callactions/run" -Body $JsData -ContentType 'application/json' -WebSession $cookieSession -Headers $requestHeaders -UseBasicParsing
  

Я делаю что-то не так?

Ответ №1:

Если friends должен быть массив объектов, вы бы хотели установить его так же, как вы установили wowMoreFriends , в @() . Также вам необходимо установить параметр в @{} , а не {} , иначе у вас возникнут проблемы в зависимости от используемой вами версии Powershell.

 $Data = @{
    friends = @(
        @{
            "friendId" = "abc1234-456Yes-repeat"
         }
    )
    wowMorefriends = @(
        @{
            "morefriendsId" = @{"hmmmMoreFriendsId" = "09876tyuhtre-repeated"}
            "callMe" = 0
            "param" = @{}
         }
     )
}
  

Но в дополнение к этому, morefriendsId была превышена ConvertTo-Json максимальная глубина по умолчанию. Таким образом, вам также нужно будет установить большую глубину через -Depth , например:

 $JsData = $Data | ConvertTo-Json -Compress -Depth 4