Share via


ConvertFrom-Json

Converte uma cadeia de caracteres formatada em JSON em um objeto personalizado ou uma tabela de hash.

Syntax

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

Description

O ConvertFrom-Json cmdlet converte uma cadeia de caracteres formatada JSON (JavaScript Object Notation) em um objeto PSCustomObject personalizado que tem uma propriedade para cada campo na cadeia de caracteres JSON. JSON utilizado comumente por sites da web para fornecer uma representação textual de objetos. O padrão JSON não proíbe o uso proibido com um PSCustomObject. 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 de qualquer objeto, use o ConvertTo-Json cmdlet .

Esse cmdlet foi introduzido no PowerShell 3.0.

Observação

A partir do PowerShell 6, esse cmdlet dá suporte a JSON com comentários. Os comentários aceitos são iniciados com duas barras (//). O comentário não será representado nos dados e poderá ser gravado no arquivo sem corromper os dados ou gerar um erro como no PowerShell 5.1.

Exemplos

Exemplo 1: converter um objeto DateTime em um objeto JSON

Esse comando usa os ConvertTo-Json cmdlets e ConvertFrom-Json para converter um objeto DateTime do Get-Date cmdlet em um objeto JSON e, em seguida, para 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 Select-Object cmdlet para obter todas as propriedades do objeto DateTime . Ele usa o ConvertTo-Json cmdlet para converter o objeto DateTime em uma cadeia de caracteres formatada como um objeto JSON e o ConvertFrom-Json cmdlet 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

Esse comando usa o Invoke-WebRequest cmdlet para obter cadeias de caracteres JSON de um serviço Web e usa o ConvertFrom-Json cmdlet 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 Invoke-RestMethod cmdlet , 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 ConvertFrom-Json cmdlet 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 , que a ConvertFrom-Json 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 no uso de maiúsculas e minúsculas. Sem a opção , o comando teria gerado um erro.

Exemplo 5: viagem de ida e volta de uma única matriz de elementos

Este comando mostra um exemplo em que a opção -NoEnumerate é usada para fazer uma viagem de ida e volta em uma matriz JSON de elemento único.

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 a opção , converter o JSON em um PSObject e convertê-lo novamente com o ConvertTo-Json comando 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 ConvertFrom-Json cmdlet.

  • Se o JSON contiver uma lista com chaves que diferem apenas no uso de maiúsculas e minúsculas. Sem o comutador, essas chaves 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, pois um PSCustomObject não permite isso, mas uma tabela de hash o faz. Um exemplo de caso de uso em que isso pode ocorrer são project.lock.json arquivos.
  • As tabelas de hash podem ser processadas mais rapidamente para determinadas estruturas de dados.
Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-Depth

Obtém ou define a profundidade máxima que a entrada JSON tem permissão para ter. Por padrão, é 1024.

Esse parâmetro foi introduzido no PowerShell 6.2.

Type:Int32
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Especifica as cadeias de caracteres JSON a converter em objetos JSON. Insira uma variável que contenha a cadeia de caracteres ou digite um comando ou expressão que obtenha essa cadeia. Você também pode redirecionar uma cadeia de caracteres para ConvertFrom-Json.

O parâmetro InputObject é obrigató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 valor InputObject não pode ser $null.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-NoEnumerate

Especifica que a saída não está enumerada.

Definir esse parâmetro faz com que as matrizes sejam enviadas como um único objeto em vez de enviar todos os elementos separadamente. Isso garante que o JSON possa ser arredondado por meio ConvertTo-Jsonde .

Type:SwitchParameter
Position:Named
Default value:False
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Entradas

String

Você pode redirecionar uma cadeia de caracteres JSON para ConvertFrom-Json.

Saídas

PSCustomObject

Hashtable

Observações

Esse cmdlet é implementado usando Newtonsoft Json.NET.

A partir do PowerShell 6, ConvertTo-Json tenta converter cadeias de caracteres formatadas como carimbos de data/hora em valores DateTime . O valor convertido é uma [datetime] instância com uma Kind propriedade 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 um à Zdireita.
  • Local, se as informações de fuso horário forem fornecidas como um deslocamento UTC à direita, como +02:00. O deslocamento é convertido corretamente no fuso horário configurado pelo chamador. A formatação de saída padrão não indica o deslocamento de fuso horário original.