ConvertFrom-Json
Converte uma cadeia de caracteres formatada em JSON em um objeto personalizado ou uma tabela de hash.
Sintaxe
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
O cmdlet ConvertFrom-Json
converte uma string formatada em JSON (JavaScript Object Notation) num objeto personalizado PSObject ou num objeto Hashtable que tem uma propriedade para cada campo na string JSON.
JSON é comumente usado por sites para fornecer uma representação textual de objetos. O cmdlet adiciona as propriedades ao novo objeto à medida que processa cada linha da cadeia de caracteres JSON.
O padrão JSON permite nomes de chave duplicados, que são proibidos nos tipos PSObject e Hashtable . Por exemplo, se a cadeia de caracteres JSON contiver chaves duplicadas, somente a última chave será usada por esse cmdlet. Veja outros exemplos abaixo.
Para gerar uma cadeia de caracteres JSON a partir de qualquer objeto, use o cmdlet ConvertTo-Json
.
Este cmdlet foi introduzido no PowerShell 3.0.
Observação
No Windows PowerShell 5.1, ConvertFrom-Json
retornou um erro quando encontrou um comentário JSON. No PowerShell 6 e superior, o cmdlet oferece suporte a JSON com comentários. Os comentários JSON não são capturados na saída de objetos pelo cmdlet. Para obter mais informações, consulte a seção de comentários JSON do artigo about_Comments.
Exemplos
Exemplo 1: Converter um objeto DateTime em um objeto JSON
Este comando usa os cmdlets ConvertTo-Json
e ConvertFrom-Json
para converter um objeto DateTime do cmdlet Get-Date
em um objeto JSON e, em seguida, em um 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
O exemplo usa o cmdlet Select-Object
para obter todas as propriedades do objeto DateTime. Ele usa o cmdlet ConvertTo-Json
para converter o objeto DateTime em uma cadeia de caracteres formatada como um objeto JSON e o cmdlet ConvertFrom-Json
para converter a cadeia de caracteres formatada em JSON em um objeto PSCustomObject.
Exemplo 2: Obter cadeias de caracteres JSON de um serviço Web e convertê-las em objetos do PowerShell
Este comando usa o cmdlet Invoke-WebRequest
para obter cadeias de caracteres JSON de um serviço Web e, em seguida, usa o cmdlet ConvertFrom-Json
para converter conteúdo JSON em objetos que podem ser gerenciados no 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
Você também pode usar o cmdlet Invoke-RestMethod
, que converte automaticamente o conteúdo JSON em objetos.
Exemplo 3: Converter uma cadeia de caracteres JSON em um objeto personalizado
Este exemplo mostra como usar o cmdlet ConvertFrom-Json
para converter um arquivo JSON em um objeto personalizado do PowerShell.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
O comando usa Get-Content cmdlet para obter as cadeias de caracteres em um arquivo JSON. O parâmetro Raw retorna o arquivo inteiro como um único objeto JSON. Em seguida, ele usa o operador de pipeline para enviar a cadeia de caracteres delimitada para o cmdlet ConvertFrom-Json
, que a converte em um objeto personalizado.
Exemplo 4: Converter uma cadeia de caracteres JSON em uma tabela de hash
Este comando mostra um exemplo em que a opção -AsHashtable
pode superar as limitações do comando.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
A cadeia de caracteres JSON contém dois pares de valores de chave com chaves que diferem apenas em invólucro. Sem o switch, o comando teria lançado um erro.
Exemplo 5: Ida e volta a uma matriz de elementos únicos
Este comando mostra um exemplo em que o switch -NoEnumerate
é usado para realizar uma conversão de ida e volta de uma matriz JSON de um único elemento.
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
A cadeia de caracteres JSON contém uma matriz com um único elemento. Sem o switch, converter o JSON em um PSObject e, em seguida, convertê-lo novamente com o comando ConvertTo-Json
resulta em um único inteiro.
Parâmetros
-AsHashtable
Converte o JSON em um objeto de tabela de hash. Essa opção foi introduzida no PowerShell 6.0. A partir do PowerShell 7.3, o objeto é um OrderedHashtable e preserva a ordenação das chaves do JSON. Em versões anteriores, o objeto é um Hashtable.
Há vários cenários em que ele pode superar algumas limitações do cmdlet ConvertFrom-Json
.
- Sem essa opção, quando duas ou mais chaves em um objeto JSON são idênticas sem distinção entre maiúsculas e minúsculas, elas são tratadas como chaves idênticas. Nesse caso, apenas a última dessas chaves idênticas sem distinção entre maiúsculas e minúsculas é incluída no objeto convertido.
- Sem essa opção, o cmdlet lança um erro sempre que o JSON contém uma chave que é uma cadeia de caracteres vazia.
PSCustomObject não pode ter nomes de propriedade que sejam cadeias de caracteres vazias. Por exemplo, isso pode ocorrer em arquivos
project.lock.json
. - As tabelas de hash podem ser processadas mais rapidamente para determinadas estruturas de dados.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-DateKind
Especifica o método usado ao analisar valores de data e hora na cadeia de caracteres JSON. Os valores aceitáveis para este parâmetro são:
Default
Local
Utc
Offset
String
Para obter informações sobre como esses valores afetam a conversão, consulte os detalhes no NOTAS.
Esse parâmetro foi introduzido no PowerShell 7.5.
Tipo: | Microsoft.PowerShell.Commands.JsonDateKind |
Valores aceites: | Default, Local, Utc, Offset, String |
Position: | Named |
Default value: | Default |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-Depth
Obtém ou define a profundidade máxima que a entrada JSON pode ter. O padrão é 1024.
Esse parâmetro foi introduzido no PowerShell 6.2.
Tipo: | Int32 |
Position: | Named |
Default value: | None |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
-InputObject
Especifica as cadeias de caracteres JSON a serem convertidas em objetos JSON. Insira uma variável que contenha a cadeia de caracteres ou digite um comando ou expressão que obtenha a cadeia de caracteres. Você também pode enviar uma string para ConvertFrom-Json
.
O parâmetro InputObject é necessário, mas seu valor pode ser uma cadeia de caracteres vazia. Quando o objeto de entrada é uma cadeia de caracteres vazia, ConvertFrom-Json
não gera nenhuma saída. O InputObject valor não pode ser $null
.
Tipo: | String |
Position: | 0 |
Default value: | None |
Necessário: | True |
Aceitar entrada de pipeline: | True |
Aceitar carateres universais: | False |
-NoEnumerate
Especifica que a saída não é enumerada.
A definição desse parâmetro faz com que as matrizes sejam enviadas como um único objeto, em vez de enviar cada elemento separadamente. Isso garante que o JSON possa ser rodado via ConvertTo-Json
.
Tipo: | SwitchParameter |
Position: | Named |
Default value: | False |
Necessário: | False |
Aceitar entrada de pipeline: | False |
Aceitar carateres universais: | False |
Entradas
Você pode canalizar uma cadeia de caracteres JSON para ConvertFrom-Json
.
Saídas
PSCustomObject
Notas
Este cmdlet é implementado usando Newtonsoft Json.NET.
A partir do PowerShell 6, ConvertTo-Json
tenta converter cadeias de caracteres formatadas como marcas temporais em valores de DateTime.
O PowerShell 7.5 adicionou o parâmetro DateKind, que permite controlar como os carimbos de data/hora são convertidos. O parâmetro aceita os seguintes valores:
-
Default
- Converte o timestamp em uma instância[datetime]
de acordo com as seguintes regras:- Se não houver informações de fuso horário na cadeia de caracteres de entrada, o serializador de Json.NET converte o valor como um valor de tempo não especificado.
- Se as informações de fuso horário forem um
Z
no final, o serializador Json.NET converte o carimbo de data/hora para um valor de UTC. - Se a marca temporal incluir um deslocamento UTC como
+02:00
, o deslocamento será convertido para o fuso horário configurado do chamador. A formatação de saída padrão não indica o deslocamento de fuso horário original.
-
Local
- Converte o carimbo de data/hora numa instância de[datetime]
na hora local do. Se o carimbo de data/hora incluir um deslocamento UTC, o deslocamento será convertido para o fuso horário configurado do chamador. A formatação de saída padrão não indica o deslocamento de fuso horário original. -
Utc
- Converte o valor em uma instância[datetime]
no tempo UTC. -
Offset
- Converte o carimbo de data/hora em uma instância[DateTimeOffset]
com o deslocamento de fuso horário da string original preservado nessa instância. Se a cadeia de caracteres bruta não contiver um deslocamento de fuso horário, o valor DateTimeOffset será especificado no fuso horário local. -
String
- Preserva o valor da instância[string]
. Isso garante que qualquer lógica de análise personalizada possa ser aplicada ao valor bruto da cadeia de caracteres.
O tipo de PSObject mantém a ordem das propriedades conforme apresentado na cadeia de caracteres JSON. A partir do PowerShell 7.3, o parâmetro AsHashtable cria um OrderedHashtable. Os pares chave-valor são adicionados na ordem apresentada na cadeia de caracteres JSON. O OrderedHashtable preserva essa ordem.