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


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. Допустимые значения для этого параметра:

  • Default
  • Local
  • Utc
  • Offset
  • String

Сведения о том, как эти значения влияют на преобразование, см. в разделе 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 сохраняет этот порядок.