ConvertFrom-Json
Converte uma cadeia de caracteres formatada em JSON em um objeto personalizado ou uma tabela de hash.
Sintaxe
Default (Predefinição)
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
O cmdlet
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
A partir do PowerShell 6, esse cmdlet oferece suporte a JSON com comentários. Os comentários aceites são iniciados com duas barras (//). O comentário não será representado nos dados e pode ser gravado no arquivo sem corromper os dados ou lançar um erro, como fez no PowerShell 5.1.
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 : 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
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 JsonFile.JSON | ConvertFrom-Json
O comando usa Get-Content cmdlet para obter as cadeias de caracteres em um arquivo 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 de uma matriz de um único elemento
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. Há vários cenários em que ele pode superar algumas limitações do cmdlet ConvertFrom-Json.
- Se o JSON contiver uma lista com chaves que diferem apenas em invólucro. Sem o interruptor, essas teclas seriam vistas como chaves idênticas e, portanto, apenas a última seria usada.
- Se o JSON contiver uma chave que seja uma cadeia de caracteres vazia. Sem a opção, o cmdlet lançaria um erro, já que a
PSCustomObjectnão permite isso, mas uma tabela de hash permite. Um exemplo de caso de uso em que isso pode ocorrer sãoproject.lock.jsonarquivos. - As tabelas de hash podem ser processadas mais rapidamente para determinadas estruturas de dados.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | False |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
-Depth
Obtém ou define a profundidade máxima que a entrada JSON pode ter. Por padrão, é 1024.
Esse parâmetro foi introduzido no PowerShell 6.2.
Propriedades dos parâmetros
| Tipo: | Int32 |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | 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.
Propriedades dos parâmetros
| Tipo: | String |
| Default value: | None |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | 0 |
| Obrigatório: | True |
| Valor do pipeline: | True |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | 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 convertido ou processado sem perda via ConvertTo-Json.
Propriedades dos parâmetros
| Tipo: | SwitchParameter |
| Default value: | False |
| Suporta carateres universais: | False |
| NãoMostrar: | False |
Conjuntos de parâmetros
(All)
| Position: | Named |
| Obrigatório: | False |
| Valor do pipeline: | False |
| Valor do pipeline por nome de propriedade: | False |
| Valor dos restantes argumentos: | False |
CommonParameters
Este cmdlet suporta os parâmetros comuns: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Para obter mais informações, consulte about_CommonParameters.
Entradas
String
Você pode canalizar uma cadeia de caracteres JSON para ConvertFrom-Json.
Saídas
PSCustomObject
Hashtable
Notas
Este cmdlet é implementado usando Newtonsoft Json.NET.
A partir do PowerShell 6, ConvertTo-Json tenta converter cadeias de caracteres formatadas como timestamps em valores de DateTime. O valor convertido é uma instância [datetime] com uma propriedade Kind definida da seguinte maneira:
-
Unspecified, se não houver informações de fuso horário na cadeia de caracteres de entrada. -
Utc, se as informações de fuso horário forem umZno final. -
Local, se a informação de fuso horário for dada como um UTC à direita deslocado como+02:00. O deslocamento é corretamente convertido para o fuso horário que o chamador configurou. A formatação de saída padrão não indica o deslocamento de fuso horário original.