ConvertFrom-Json
Преобразует строку в формате JSON в пользовательский объект или хэш-таблицу.
Синтаксис
Default (по умолчанию)
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Описание
Командлет ConvertFrom-Json преобразует строку, форматированную в JavaScript Object Notation (JSON), в настраиваемый объект PSObject или объект Hashtable, содержащий свойство для каждого поля из JSON-строки.
JSON обычно используется веб-сайтами для предоставления текстового представления объектов. Командлет добавляет свойства в новый объект, обрабатывая каждую строку строки JSON.
Стандарт JSON позволяет использовать повторяющиеся имена ключей, которые запрещены в типах PSObject и Hashtable. Например, если строка JSON содержит повторяющиеся ключи, этот командлет использует только последний ключ. См. другие примеры ниже.
Чтобы создать строку JSON из любого объекта, используйте командлет ConvertTo-Json.
Этот командлет был введён в PowerShell 3.0.
Замечание
В Windows PowerShell 5.1 ConvertFrom-Json вернул ошибку при возникновении комментария JSON. В PowerShell 6 и более поздних версиях командлет поддерживает JSON с комментариями. Комментарии JSON не сохраняются в выходных данных объектов, создаваемых командлетом. Для получения дополнительной информации см. раздел Комментарии JSON статьи about_Comments.
Примеры
Пример 1. Преобразование объекта DateTime в объект JSON
Эта команда использует командлеты ConvertTo-Json и ConvertFrom-Json для преобразования объекта DateTime из командлета Get-Date в объект JSON, а затем в PSCustomObject.
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Monday, January 29, 2024 3:10:26 PM
Date : 1/29/2024 12:00:00 AM
Day : 29
DayOfWeek : 1
DayOfYear : 29
Hour : 15
Kind : 2
Millisecond : 931
Microsecond : 47
Nanosecond : 600
Minute : 10
Month : 1
Second : 26
Ticks : 638421378269310476
TimeOfDay : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year : 2024
В примере используется командлет 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. - Хэш-таблицы можно обрабатывать быстрее для определенных структур данных.
Свойства параметра
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-DateKind
Задает метод, используемый при анализе значений даты и времени в строке JSON. Допустимые значения для этого параметра:
DefaultLocalUtcOffsetString
Сведения о том, как эти значения влияют на преобразование, см. в разделе NOTES.
Этот параметр появился в PowerShell 7.5.
Свойства параметра
| Тип: | Microsoft.PowerShell.Commands.JsonDateKind |
| Default value: | Default |
| Допустимые значения: | Default, Local, Utc, Offset, String |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-Depth
Возвращает или задает максимальную глубину входных данных JSON. Значение по умолчанию — 1024.
Этот параметр появился в PowerShell 6.2.
Свойства параметра
| Тип: | Int32 |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-InputObject
Указывает строки JSON для преобразования в объекты JSON. Введите переменную, содержащую строку, или введите команду или выражение, которое получает строку. Можно также переслать строку в ConvertFrom-Json.
Параметр InputObject является обязательным, но его значение может быть пустой строкой. Если входной объект является пустой строкой, ConvertFrom-Json не создает выходные данные. Значение объекта ввода не может быть $null.
Свойства параметра
| Тип: | String |
| Default value: | None |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | 0 |
| Обязательно: | True |
| Значение из конвейера: | True |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
-NoEnumerate
Указывает, что выходные данные не перечисляются.
Установка этого параметра приводит к отправке массивов в виде одного объекта вместо отправки каждого элемента отдельно. Это гарантирует, что JSON можно передавать туда и обратно с помощью ConvertTo-Json.
Свойства параметра
| Тип: | SwitchParameter |
| Default value: | False |
| Поддерживаются подстановочные знаки: | False |
| DontShow: | False |
Наборы параметров
(All)
| Position: | Named |
| Обязательно: | False |
| Значение из конвейера: | False |
| Значение из конвейера по имени свойства: | False |
| Значение из оставшихся аргументов: | False |
CommonParameters
Этот командлет поддерживает общие параметры: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction и -WarningVariable. Дополнительные сведения см. в разделе about_CommonParameters.
Входные данные
String
Строку JSON можно передать в ConvertFrom-Json.
Выходные данные
PSCustomObject
OrderedHashtable
Примечания
Этот командлет реализован с помощью Newtonsoft Json.NET.
Начиная с PowerShell 6, ConvertTo-Json пытается преобразовать строки, отформатированные как метки времени, в значения DateTime.
PowerShell 7.5 добавил параметр DateKind, который позволяет управлять преобразованием строки метки времени. Параметр принимает следующие значения:
-
Default. Преобразует метку времени в экземпляр[datetime]в соответствии со следующими правилами:- Если в входной строке нет сведений часового пояса, сериализатор Json.NET преобразует значение в качестве неопределенного значения времени.
- Если информация о часовом поясе является заключительным
Z, сериализатор Json.NET преобразует метку времени в значение UTC. - Если метка времени включает смещение в формате UTC, например
+02:00, смещение преобразуется в настроенный часовой пояс вызывающего абонента. Форматирование выходных данных по умолчанию не указывает исходное смещение часового пояса.
-
Local— преобразует метку времени в экземпляр[datetime]в локальное время . Если метка времени включает смещение в формате UTC, смещение преобразуется в настроенный часовой пояс вызывающего абонента. Форматирование выходных данных по умолчанию не указывает исходное смещение часового пояса. -
Utc— Преобразует значение в экземпляр[datetime]в часовом поясе UTC. -
Offset- Преобразует метку времени в экземпляр[DateTimeOffset], при этом смещение часового пояса из исходной строки сохраняется в этом экземпляре. Если необработанная строка не содержала смещение часового пояса, значение DateTimeOffset будет указано в локальном часовом поясе. -
String— сохраняет значение экземпляра[string]. Это гарантирует, что любая пользовательская логика синтаксического анализа может применяться к необработанному строковому значению.
Тип PSObject поддерживает порядок свойств, представленных в строке JSON. Начиная с PowerShell 7.3, параметр AsHashtable создает OrderedHashtable. Пары "ключ-значение" добавляются в порядке, представленном в строке JSON. OrderHashtable сохраняет этот порядок.