Serialização e desserialização de objetos PowerShell

PowerShell/Operações
Serialização e desserialização de objetos PowerShell

Autor : Li Juncai (jcLee95) : https://blog.csdn.net/qq_28550263
E-mail: [email protected]
Endereço do artigo : https://blog.csdn.net/qq_28550263/article/details/132871258



1. Visão Geral

No PowerShell , serialização e desserialização de objetos é o processo de converter um objeto em um formato de string para armazenamento ou transmissão e, em seguida, restaurá-lo de uma string para um objeto. Isto é útil em muitas aplicações, especialmente quando você precisa salvar objetos em um arquivo, passá-los para um servidor remoto ou armazená-los em um banco de dados.

A seguir, este artigo apresentará como realizar operações de serialização e desserialização de objetos no PowerShell .

2. Serialização: Converta objetos em strings

Para serializar um objeto em uma string, você pode usar cmdlets no PowerShell . ConvertTo-JsonAqui está um exemplo que mostra como serializar um objeto em uma string JSON:

# 创建一个示例对象

$person = @{
    
    
    FirstName = "Jack"
    LastName = "Lee"
    Age = 29
}

# 将对象序列化为 JSON 字符串

$jsonString = $person | ConvertTo-Json
# 打印 JSON 字符串
Write-Host "JSON 字符串:"
Write-Host $jsonString

O resultado da execução da saída é:

JSON 字符串:
{
    "Age":  29,
    "FirstName":  "Jack",
    "LastName":  "Lee"
}

No exemplo acima, primeiro criamos um objeto de amostra $persone depois o convertemos em uma string JSON usando ConvertTo-Json . Você pode usar essa string para salvar o objeto em um arquivo ou passá-lo para outro lugar.

3. Desserialização: Restaure o objeto da string

Para restaurar objetos de strings, você pode usar ConvertFrom-Jsoncmdlets. Aqui está um exemplo que mostra como restaurar um objeto de uma string JSON :

# JSON 字符串
$jsonString = '{
    "FirstName": "Jack",
    "LastName": "Lee",
    "Age": 28
}'

# 从 JSON 字符串中还原对象
$person = $jsonString | ConvertFrom-Json

# 打印还原后的对象
Write-Host "还原后的对象:"
Write-Host "FirstName: $($person.FirstName)"
Write-Host "LastName: $($person.LastName)"
Write-Host "Age: $($person.Age)"

O resultado da execução da saída é:

还原后的对象:
FirstName: Jack
LastName: Lee
Age: 28

No exemplo acima, primeiro temos uma string JSON$jsonString e depois usamos ConvertFrom-Json para restaurá-la em um objeto. O objeto restaurado pode acessar suas propriedades como um objeto normal.

Observação: as propriedades e a estrutura do objeto devem ser consistentes com a representação JSON do objeto original, caso contrário, a desserialização poderá falhar.

Por meio da serialização e desserialização, os objetos podem ser facilmente salvos, transferidos e restaurados no PowerShell , o que é muito útil para muitos cenários de aplicativos. Seja interagindo com sistemas de arquivos, comunicações de rede ou bancos de dados, a serialização e desserialização de objetos são ferramentas poderosas.

Apêndice: Análise de parâmetros de comandos e opções

F.1 Comando ConvertTo-Json

Uma string usada para converter um objeto para o formato JSON. Ele permite serializar objetos do PowerShell no formato JSON para fácil armazenamento, transmissão e interação de dados com outros sistemas. O formato deste comando é:

ConvertTo-Json [-InputObject] <PSObject> [-Depth <int>] [-Compress] [-EscapeHandling <String>] [-Pretty] [<CommonParameters>]

Onde:
-InputObject: Este é um parâmetro obrigatório que especifica o objeto do PowerShell a ser convertido em JSON. Pode ser um valor escalar, array, tabela hash, objeto personalizado, etc.

-Depth: usado para especificar a profundidade de aninhamento de objetos JSON. Por padrão, a profundidade é 2, o que significa que serão convertidos até dois níveis de objetos aninhados. Se o seu objeto tiver mais níveis de aninhamento, você poderá lidar com isso especificando uma profundidade maior. Mas esteja ciente de que definir uma profundidade muito alta pode fazer com que os dados JSON gerados sejam muito complexos.

-Compress: se esta opção for especificada, a string JSON gerada não conterá espaços e recuos extras, tornando-a mais compacta. Isso é útil para reduzir o tamanho dos dados JSON.

-EscapeHandling: usado para especificar como lidar com caracteres de escape ao gerar strings JSON. Os valores opcionais incluem:

  • Default: use o método de processamento de escape padrão.
  • EscapeHtml: Escape de caracteres HTML.
  • EscapeNonAscii: Escape de caracteres não ASCII.
# 定义一个复杂的 PowerShell 哈希表对象
$complexObject = @{
    
    
    Name = "Jack"
    Info = @{
    
    
        Age = 29
        Address = @{
    
    
            Street = "Xuefu Road, Nanshan District"
            City = "Shenzhen"
        }
    }
}

# 将对象转换为 JSON 字符串,设置深度为 4
$jsonString = $complexObject | ConvertTo-Json -Depth 4

# 打印 JSON 字符串到控制台
Write-Host "生成的 JSON 字符串内容:"
Write-Host $jsonString

O resultado da execução é:

生成的 JSON 字符串内容:
{
    "Name":  "Jack",
    "Info":  {
                 "Age":  29,
                 "Address":  {
                                 "City":  "Shenzhen",
                                 "Street":  "Xuefu Road, Nanshan District"
                             }
             }
}

F.2 Comando ConvertFrom-Json

Referência: https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/convertfrom-json?view=powershell-7.3

ConvertFrom-JsonUsado para converter strings formatadas em JSON em objetos personalizados ou tabelas hash. JSON é um formato de troca de dados comumente usado em sites. Este comando pode ajudá-lo a converter esses dados formatados em JSON em objetos fáceis de operar no PowerShell.

O formato da sintaxe deste comando é:

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

em:

  • -InputObject: especifica a string JSON a ser convertida em um objeto JSON.
  • -AsHashtable: Converta JSON em objeto de tabela hash. A partir do PowerShell 7.3, este objeto é um OrderedHashtable e preserva a ordem das chaves no JSON.
  • -Depth: defina a profundidade máxima permitida para entrada JSON, o padrão é 1024.
  • -NoEnumerate: especifica não enumerar a saída, usada para garantir que ConvertTo-Jsonviagens de ida e volta JSON possam ser feitas.

ConvertFrom-JsonO cmdlet converte uma cadeia de caracteres formatada em JSON em um PSObject personalizado ou em um objeto de tabela hash, onde cada campo corresponde a um atributo na cadeia de caracteres JSON. JSON é frequentemente usado em sites para representar dados de objetos em formato de texto. Este cmdlet adiciona propriedades a um novo objeto à medida que processa cada linha da cadeia JSON.

O padrão JSON permite nomes de chaves duplicados, mas não nos tipos PSObject e Hashtable. Por exemplo, se a cadeia JSON contiver chaves duplicadas, este cmdlet utilizará apenas a última chave. Veja exemplos adicionais abaixo.

Para gerar uma string JSON de qualquer objeto, use ConvertTo-Jsoncmdlets.

Exemplo

Exemplo 1: Converter objeto DateTime em objeto JSON

O comando a seguir usa o cmdlet ConvertTo-Jsone ConvertFrom-Jsonpara Get-Dateconverter o objeto DateTime obtido do cmdlet em um objeto JSON e, em seguida, em um PSCustomObject.

Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json

Este exemplo usa Select-Objectum cmdlet para obter todas as propriedades de um objeto DateTime. Ele usa ConvertTo-Jsonum cmdlet para converter o objeto DateTime em uma cadeia de caracteres formatada em JSON e, em seguida, usa ConvertFrom-Jsono cmdlet para converter a cadeia de caracteres formatada em JSON em um objeto PSCustomObject.

Exemplo 2: Obtenha a string JSON do serviço web e converta para o objeto PowerShell

O comando a seguir usa Invoke-WebRequestum cmdlet para obter uma cadeia de caracteres JSON de um serviço Web e, em seguida, usa ConvertFrom-Jsono cmdlet para converter o conteúdo JSON em um objeto que pode ser gerenciado no PowerShell.

# 确保Invoke-WebRequest使用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 Invoke-RestMethodcmdlets, que converterão automaticamente o conteúdo JSON em objetos.

Exemplo 3: Converter string JSON em objeto personalizado

Este exemplo mostra como usar ConvertFrom-Jsoncmdlets para converter um arquivo JSON em um objeto personalizado do PowerShell.

Get-Content -Raw JsonFile.JSON | ConvertFrom-Json

Este comando usa Get-Contentum cmdlet para obter uma string de um arquivo JSON. Use -Rawos parâmetros para retornar o arquivo inteiro como um único objeto JSON e, em seguida, use o operador pipe para enviar a cadeia de caracteres delimitada ao ConvertFrom-Jsoncmdlet para convertê-la em um objeto personalizado.

Exemplo 4: Converter string JSON em tabela hash

Este exemplo mostra um exemplo de uso de -AsHashtableswitches para superar ConvertFrom-Jsonalgumas das limitações de um comando.

'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable

A string JSON contém dois pares de valores-chave e as chaves diferem apenas em maiúsculas e minúsculas. Sem a opção, este comando reportará um erro.

Exemplo 5: ida e volta de uma string JSON contendo uma matriz de elemento único

Este exemplo mostra como usar -NoEnumerateopções para percorrer uma matriz JSON contendo um único elemento.

Write-Output "With -NoEnumerate: $('[1]' | ConvertFrom-Json -NoEnumerate | ConvertTo-Json -Compress)"
Write-Output "Without -NoEnumerate: $('[1]' | ConvertFrom-Json | ConvertTo-Json -Compress)"

Uma string JSON contém uma matriz contendo um único elemento. Sem a opção, a conversão de JSON em PSObject e a ConvertTo-Jsonconversão novamente usando o comando resultará em um único número inteiro.

parâmetro

  • -AsHashtable: Converta JSON em objeto de tabela hash.
  • -Depth: Profundidade máxima permitida para entrada JSON.
  • -InputObject: string JSON a ser convertida em um objeto JSON.
  • -NoEnumerate: especifica que a saída não deve ser enumerada.

entrada e saída

  • Entrada: sequência JSON.
  • Saída: PSCustomObject (objeto personalizado) ou OrderedHashtable (tabela hash ordenada).

Perceber

  • Este cmdlet é implementado usando Newtonsoft Json.NET.
  • A partir do PowerShell 6, ConvertTo-Jsoné feita uma tentativa de converter uma cadeia de caracteres formatada como carimbo de data/hora em um valor DateTime.
  • O tipo PSObject manterá a ordem das propriedades igual à da string JSON. A partir do PowerShell 7.3, AsHashtableos parâmetros criarão um OrderedHashtable, os pares chave-valor serão adicionados na ordem na string JSON e a tabela hash ordenada manterá essa ordem.

Acho que você gosta

Origin blog.csdn.net/qq_28550263/article/details/132871258
Recomendado
Clasificación