ConvertFrom-Json
Преобразует строку в формате JSON в пользовательский объект или хэш-таблицу.
Синтаксис
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Описание
Командлет ConvertFrom-Json
преобразует строку в формате НОТАЦИИ объектов JavaScript (JSON) в пользовательский объект PSObject или Hashtable , имеющий свойство для каждого поля в строке JSON.
Формат JSON обычно используется на веб-сайтах для текстового представления объектов. Командлет добавляет свойства в новый объект при обработке каждой строки строки JSON.
Стандарт JSON допускает дублирование имен ключей, которые запрещены в типах PSObject и Hashtable . Например, если строка JSON содержит повторяющиеся ключи, этот командлет использует только последний ключ. См. другие примеры ниже.
Чтобы создать строку JSON из любого объекта, используйте ConvertTo-Json
командлет .
Этот командлет появился в PowerShell 3.0.
Примечание
Начиная с PowerShell 6, командлет поддерживает JSON с комментариями. Комментарии JSON начинаются с двух символов косой черты (//
). Комментарии JSON не записываются в выходные данные объектов командлетом . До PowerShell 6 возвращал ошибку при ConvertFrom-Json
обнаружении комментария JSON.
Примеры
Пример 1. Преобразование объекта DateTime в объект JSON
Эта команда использует ConvertTo-Json
командлеты и ConvertFrom-Json
для преобразования объекта DateTime из командлета в Get-Date
объект JSON, а затем в PSCustomObject.
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Friday, January 13, 2012 8:06:31 PM
Date : 1/13/2012 8:00:00 AM
Day : 13
DayOfWeek : 5
DayOfYear : 13
Hour : 20
Kind : 2
Millisecond : 400
Minute : 6
Month : 1
Second : 31
Ticks : 634620819914009002
TimeOfDay : @{Ticks=723914009002; Days=0; Hours=20; Milliseconds=400; Minutes=6; Seconds=31; TotalDays=0.83786343634490734; TotalHours=20.108722472277776; TotalMilliseconds=72391400.900200009; TotalMinutes=1206.5233483366667;TotalSeconds=72391.4009002}
Year : 2012
В примере командлет используется Select-Object
для получения всех свойств объекта DateTime . Он использует ConvertTo-Json
командлет для преобразования объекта DateTime в строку, отформатированную как объект JSON, и ConvertFrom-Json
командлет для преобразования строки в формате JSON в объект PSCustomObject .
Пример 2. Получение строк JSON из веб-службы и их преобразование в объекты PowerShell
Эта команда использует Invoke-WebRequest
командлет для получения строк JSON из веб-службы, а затем использует ConvertFrom-Json
командлет для преобразования содержимого JSON в объекты, которыми можно управлять в PowerShell.
# Ensures that Invoke-WebRequest uses TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$j = Invoke-WebRequest 'https://api.github.com/repos/PowerShell/PowerShell/issues' | ConvertFrom-Json
Можно также использовать Invoke-RestMethod
командлет , который автоматически преобразует содержимое JSON в объекты.
Пример 3. Преобразование строки JSON в пользовательский объект
В этом примере показано, как использовать ConvertFrom-Json
командлет для преобразования JSON-файла в пользовательский объект PowerShell.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
Команда использует командлет Get-Content для получения строк в JSON-файле. Параметр Raw возвращает весь файл в виде одного объекта JSON. Затем оператор конвейера используется для отправки строки с разделителями командлету ConvertFrom-Json
, который преобразует ее в пользовательский объект.
Пример 4. Преобразование строки JSON в хэш-таблицу
Эта команда показывает пример, в котором переключатель -AsHashtable
может преодолеть ограничения команды.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
Строка JSON содержит две пары значений ключей с ключами, которые отличаются только регистром. Без параметра команда вылила бы ошибку.
Пример 5. Круговая поездка массива с одним элементом
Эта команда показывает пример, в котором -NoEnumerate
параметр используется для кругового пути массива JSON с одним элементом.
Write-Output "With -NoEnumerate: $('[1]' | ConvertFrom-Json -NoEnumerate | ConvertTo-Json -Compress)"
Write-Output "Without -NoEnumerate: $('[1]' | ConvertFrom-Json | ConvertTo-Json -Compress)"
With -NoEnumerate: [1]
Without -NoEnumerate: 1
Строка JSON содержит массив с одним элементом. Без параметра преобразование JSON в PSObject, а затем его обратно с ConvertTo-Json
помощью команды приводит к одному целому значению.
Параметры
-AsHashtable
Преобразует JSON в объект хэш-таблицы. Этот параметр появился в PowerShell 6.0. Начиная с PowerShell 7.3, объект является столбцом OrderedHashtable и сохраняет порядок ключей из JSON. В предыдущих версиях объект является хэш-статьей.
Существует несколько сценариев, в которых он может преодолеть некоторые ограничения командлета ConvertFrom-Json
.
- Без этого параметра, если два или более ключа в объекте JSON идентичны без учета регистра, они обрабатываются как идентичные ключи. В этом случае в преобразованный объект включается только последний из этих ключей без учета регистра.
- Без этого параметра командлет выдает ошибку всякий раз, когда JSON содержит ключ, представляющий собой пустую строку. PSCustomObject не может иметь имена свойств, которые являются пустыми строками. Например, это может произойти в файлах
project.lock.json
. - Хэш-таблицы можно обрабатывать быстрее для определенных структур данных.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-Depth
Возвращает или задает максимальную глубину входных данных JSON. Значение по умолчанию — 1024.
Этот параметр появился в PowerShell 6.2.
Type: | Int32 |
Position: | Named |
Default value: | None |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
-InputObject
Указывает строки JSON, которые нужно преобразовать в объекты JSON. Введите переменную, содержащую строку, либо введите команду или выражение для получения строки. Можно также передать строку в ConvertFrom-Json
.
Параметр InputObject обязателен, но его значением может быть пустая строка. Если входной объект является пустой строкой, ConvertFrom-Json
выходные данные не создаются. Значение InputObject не может иметь значение $null
.
Type: | String |
Position: | 0 |
Default value: | None |
Required: | True |
Accept pipeline input: | True |
Accept wildcard characters: | False |
-NoEnumerate
Указывает, что выходные данные не перечисляются.
Установка этого параметра приводит к тому, что массивы отправляются как один объект, а не отправляются каждый элемент отдельно. Это гарантирует, что JSON может быть циклический споткнут с помощью ConvertTo-Json
.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Required: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Входные данные
Строку JSON можно передать по конвейеру в ConvertFrom-Json
.
Выходные данные
PSCustomObject
Примечания
Этот командлет реализуется с помощью Json.NET Newtonsoft.
Начиная с PowerShell 6, пытается преобразовать строки, отформатированные как метки времени, ConvertTo-Json
в значения DateTime . Преобразованное значение представляет собой [datetime]
экземпляр со свойством, заданным Kind
следующим образом:
Unspecified
, если во входной строке нет сведений о часовом поясе.Utc
, если сведения о часовом поясе являются конечнымиZ
.Local
, если сведения о часовом поясе предоставляются в виде смещения в формате UTC, например+02:00
. Смещение правильно преобразуется в настроенный часовой пояс вызывающего абонента. Форматирование выходных данных по умолчанию не указывает исходное смещение часового пояса.
Тип PSObject поддерживает порядок свойств, представленный в строке JSON. Начиная с PowerShell 7.3, параметр AsHashtable создает orderedHashtable. Пары "ключ-значение" добавляются в порядке, представленном в строке JSON. OrderHashtable сохраняет этот порядок.