Всем привет.
Если вы работали в ИТ-сфере в течение последних пяти лет, вы, вероятно, сталкивались с объектами JSON. JavaScript Object Notation (JSON), созданный в начале 2000-х годов, представляет собой машиночитаемый, но при этом понятный человеку язык иерархической организации наборов данных. Как следует из названия, такое представление данных активно использовалось в приложениях JavaScript, а следовательно, и в веб-разработке. Недавний всплеск числа онлайн-сервисов, пользующихся REST API (это технология, которую используют для передачи данных между клиентом и сервером), привел к параллельному всплеску использования JSON. Если вы что-то делаете в интернете, вам пригодится навык работы с файлами JSON, которыми можно легко управлять в PowerShell.
Если говорить более конкретно, то JSON позволяет описывать объекты, на подобие того как это делает xml, но намного проще. По сути JSON-объекты представляют собой хеш-таблицу, допускающую вложенность.
Следующий пример показывает JSON-представление объекта, описывающего человека. В объекте есть строковые поля имени и фамилии, объект, описывающий адрес, и массив, содержащий список телефонов.
{
"firstName": "Иван",
"lastName": "Иванов",
"address": {
"streetAddress": "Московское ш., 101, кв.101",
"city": "Петербург",
"postalCode": 101101
},
"phoneNumbers": [
"812 123-1234",
"916 123-4567"
]
}
Для работы с JSON-объектами в Powershell начиная с версии 3.0 предусмотрены специальные командлеты:
PS C:\> Get-Command '*json'
CommandType Name ModuleName
----------- ---- ----------
Cmdlet ConvertFrom-Json Microsoft.PowerShell.Utility
Cmdlet ConvertTo-Json Microsoft.PowerShell.Utility
Для создания JSON-объекта его описание в определённом формате нужно поместить в here-string (многострочную текстовую переменную). Звучит страшно, но самом деле всё просто: берём описание нашего объекта выше, помещаем его между символами @” и “@ (это и есть here-string) и скармливаем всё это командлету ConvertFrom-Json, который конвертирует JSON-отформатированные строки в объект:
$User = @"
{
"firstName": "Иван",
"lastName": "Иванов",
"address": {
"streetAddress": "Московское ш., 101, кв.101",
"city": "Петербург",
"postalCode": 101101
},
"phoneNumbers": [
"812 123-1234",
"916 123-4567"
]
}
"@ | ConvertFrom-Json
Вот и всё! Объект создан. Теперь можно обращаться к отдельным свойствам объекта любой вложенности:
PS C:\> $User.firstName
Иван
PS C:\> $User.address.city
Петербург
PS C:\> $User.phoneNumbers[0]
812 123-1234
При помощи JSON-формата очень удобно сохранять в одном объекте информацию, полученную с разных объектов и разных типов. Рассмотрим ещё один пример:
$json = @"
{
"ServerName" : "$env:ComputerName",
"UserName" : "$env:UserName",
"ComputerInfo" :
{
"Manufacturer": "$((Get-WmiObject Win32_ComputerSystem).Manufacturer)",
"Architecture": "$((Get-wmiObject Win32_OperatingSystem).OSArchitecture)",
"SerialNumber": "$((Get-wmiObject Win32_OperatingSystem).SerialNumber)"
},
"CollectionDate" : "$(Get-Date)"
}
"@
$Info = ConvertFrom-Json -InputObject $json
Из созданного объекта достаём, интересующие свойства:
PS C:\> $Info.ServerName
SERVER01
PS C:\> $Info.UserName
admin
PS C:\> $Info.ComputerInfo.Manufacturer
System manufacturer
PS C:\> $Info.CollectionDate
07/11/2021 10:05:00
PS C:\> $Info.ComputerInfo.Architecture
64-bit
Если же необходимо из готового объекта сделать JSON-форматированную строку следует использовать командлет ConvertTo-Json. Например:
$File = Get-ChildItem C:\Windows\System32\calc.exe
$File.VersionInfo | ConvertTo-Json
В результате получаем:
{
"Comments": "",
"CompanyName": "Microsoft Corporation",
"FileBuildPart": 19041,
"FileDescription": "Windows Calculator",
"FileMajorPart": 10,
"FileMinorPart": 0,
"FileName": "C:\\Windows\\System32\\calc.exe",
"FilePrivatePart": 1,
"FileVersion": "10.0.19041.1 (WinBuild.160101.0800)",
"InternalName": "CALC",
"IsDebug": false,
"IsPatched": false,
"IsPrivateBuild": false,
"IsPreRelease": false,
"IsSpecialBuild": false,
"Language": "Английский (США)",
"LegalCopyright": "© Microsoft Corporation. All rights reserved.",
"LegalTrademarks": "",
"OriginalFilename": "CALC.EXE",
"PrivateBuild": "",
"ProductBuildPart": 19041,
"ProductMajorPart": 10,
"ProductMinorPart": 0,
"ProductName": "Microsoft® Windows® Operating System",
"ProductPrivatePart": 1,
"ProductVersion": "10.0.19041.1",
"SpecialBuild": "",
"FileVersionRaw": {
"Major": 10,
"Minor": 0,
"Build": 19041,
"Revision": 1,
"MajorRevision": 0,
"MinorRevision": 1
},
"ProductVersionRaw": {
"Major": 10,
"Minor": 0,
"Build": 19041,
"Revision": 1,
"MajorRevision": 0,
"MinorRevision": 1
}
}
После создания JSON-строки, её можно легко отправить другому приложению. Наиболее частое использование JSON – пересылка данных от сервера к браузеру. Обычно данные доставляются с помощью AJAX, который позволяет обмениваться данными между браузером и сервером без перезагрузки страницы.
Теперь, когда вы знаете, как работать с данными JSON, в следующий раз сделаем нечто более интересное - мы воспользуемся PowerShell для запроса REST API и анализа полученных результатов.
Увидимся.
No comments:
Post a Comment
А что вы думаете по этому поводу?