Поделиться через


ConvertFrom-Json

Преобразует строку в формате JSON в пользовательский объект или хэш-таблицу.

Синтаксис

ConvertFrom-Json
                [-InputObject] <String>
                [-AsHashtable]
                [-Depth <Int32>]
                [-NoEnumerate]
                [<CommonParameters>]

Описание

Командлет ConvertFrom-Json преобразует строку в формате НОТАЦИИ объектов JavaScript (JSON) в пользовательский объект PSCustomObject , имеющий свойство для каждого поля в строке JSON. Формат JSON обычно используется на веб-сайтах для текстового представления объектов. Стандарт JSON не запрещает использование, запрещенное с PSCustomObject. Например, если строка JSON содержит повторяющиеся ключи, этот командлет использует только последний ключ. См. другие примеры ниже.

Чтобы создать строку JSON из любого объекта, используйте ConvertTo-Json командлет .

Этот командлет появился в PowerShell 3.0.

Примечание

Начиная с PowerShell 6 этот командлет поддерживает JSON с комментариями. Принятые комментарии начинаются с двух косой черты (//). Комментарий не будет представлен в данных и может быть записан в файл, не повреждая данные или не вызывая ошибку, как это было в PowerShell 5.1.

Примеры

Пример 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 JsonFile.JSON | ConvertFrom-Json

Команда использует командлет Get-Content для получения строк в 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. Существует несколько сценариев, в которых он может преодолеть некоторые ограничения командлета 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

Входные данные

String

Строку JSON можно передать по конвейеру в ConvertFrom-Json.

Выходные данные

PSCustomObject

Hashtable

Примечания

Этот командлет реализуется с помощью Json.NET Newtonsoft.

Начиная с PowerShell 6, пытается преобразовать строки, отформатированные как метки времени, ConvertTo-Json в значения DateTime . Преобразованное значение представляет собой [datetime] экземпляр со свойством, заданным Kind следующим образом:

  • Unspecified, если во входной строке нет сведений о часовом поясе.
  • Utc, если сведения о часовом поясе являются конечными Z.
  • Local, если сведения о часовом поясе предоставляются в виде смещения в формате UTC, например +02:00. Смещение правильно преобразуется в настроенный часовой пояс вызывающего абонента. Форматирование выходных данных по умолчанию не указывает исходное смещение часового пояса.