ConvertFrom-Json

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

Sintaxe

Default (Default)

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

Description

O cmdlet ConvertFrom-Json 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. O JSON é comumente usado por sites da Web para fornecer uma representação textual de objetos. O padrão JSON não proíbe o uso que é proibido com umPSCustomObject . 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 cmdlet ConvertTo-Json.

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 pode ser gravado no arquivo sem corromper os dados ou gerar um erro como aconteceu no PowerShell 5.1.

Exemplos

Exemplo 1: Converter um objeto DateTime em um objeto JSON

Esse 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

Esse comando usa o cmdlet Invoke-WebRequest para obter cadeias de caracteres JSON de um serviço Web e 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 chave-valor, 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 em uma matriz de um único elemento

Este comando mostra um exemplo em que o comutador -NoEnumerate é usado para realizar um ciclo completo 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 o interruptor, converter o JSON em um PSObject e 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 maiúsculas e minúsculas. Sem o interruptor, 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 geraria um erro, pois a PSCustomObject não permite isso, mas uma tabela de hash permite. Um exemplo de caso de uso em que isso pode ocorrer são project.lock.json os arquivos.
  • As tabelas de hash podem ser processadas mais rapidamente para determinadas estruturas de dados.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:False
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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.

Propriedades do parâmetro

Tipo:Int32
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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 obtém a cadeia de caracteres. Você também pode redirecionar uma cadeia de caracteres 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 valor InputObject não pode ser .

Propriedades do parâmetro

Tipo:String
Valor padrão:None
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:0
Obrigatório:True
Valor do pipeline:True
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes:False

-NoEnumerate

Especifica que a saída não é enumerada.

Definir esse 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 fazer uma viagem de ida e volta por meio de ConvertTo-Json.

Propriedades do parâmetro

Tipo:SwitchParameter
Valor padrão:False
Dá suporte a curingas:False
DontShow:False

Conjuntos de parâmetros

(All)
Cargo:Named
Obrigatório:False
Valor do pipeline:False
Valor do pipeline pelo nome da propriedade:False
Valor dos argumentos restantes: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

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 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 estiverem no final como um Z.
  • Local se as informações de fuso horário forem fornecidas como um diferença UTC à direita como +02:00. A diferença é convertida corretamente para o fuso horário configurado pelo chamador. A formatação de saída padrão não indica o deslocamento de fuso horário original.