Serialización y deserialización de objetos PowerShell

PowerShell/Operaciones
Serialización y deserialización de objetos PowerShell

Autor : Li Juncai (jcLee95) : https://blog.csdn.net/qq_28550263
Correo electrónico: [email protected]
Dirección del artículo : https://blog.csdn.net/qq_28550263/article/details/132871258



1. Información general

En PowerShell , la serialización y deserialización de objetos es el proceso de convertir un objeto a un formato de cadena para su almacenamiento o transmisión y luego restaurarlo de una cadena a un objeto. Esto es útil en muchas aplicaciones, especialmente cuando necesita guardar objetos en un archivo, pasarlos a un servidor remoto o almacenarlos en una base de datos.

A continuación, este artículo presentará cómo realizar operaciones de serialización y deserialización de objetos en PowerShell .

2. Serialización: convertir objetos en cadenas

Para serializar un objeto en una cadena, puede usar cmdlets en PowerShell . ConvertTo-JsonA continuación se muestra un ejemplo que muestra cómo serializar un objeto en una cadena JSON:

# 创建一个示例对象

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

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

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

El resultado de ejecutar la salida es:

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

En el ejemplo anterior, primero creamos un objeto de muestra $persony luego lo convertimos en una cadena JSON usando ConvertTo-Json . Puede utilizar esta cadena para guardar el objeto en un archivo o pasarlo a otro lugar.

3. Deserialización: restaurar objeto desde cadena

Para restaurar objetos a partir de cadenas, puede utilizar ConvertFrom-Jsoncmdlets. A continuación se muestra un ejemplo que muestra cómo restaurar un objeto a partir de una cadena 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)"

El resultado de ejecutar la salida es:

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

En el ejemplo anterior, primero tenemos una cadena JSON$jsonString y luego usamos ConvertFrom-Json para restaurarla a un objeto. El objeto restaurado puede acceder a sus propiedades como un objeto normal.

Nota: Las propiedades y la estructura del objeto deben ser coherentes con la representación JSON del objeto original; de lo contrario, la deserialización puede fallar.

A través de la serialización y deserialización, los objetos se pueden guardar, transferir y restaurar fácilmente en PowerShell , lo cual es muy útil para muchos escenarios de aplicaciones. Ya sea que se interactúe con sistemas de archivos, comunicaciones de red o bases de datos, la serialización y deserialización de objetos son herramientas poderosas.

Apéndice: Análisis de parámetros de comandos y opciones

F.1 Comando Convertir a Json

Una cadena utilizada para convertir un objeto al formato JSON. Le permite serializar objetos de PowerShell en formato JSON para facilitar el almacenamiento, la transmisión y la interacción de datos con otros sistemas. El formato de este comando es:

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

Dónde:
-InputObject: Este es un parámetro obligatorio que especifica el objeto de PowerShell que se convertirá a JSON. Puede ser un valor escalar, una matriz, una tabla hash, un objeto personalizado, etc.

-Depth: Se utiliza para especificar la profundidad de anidamiento de objetos JSON. De forma predeterminada, la profundidad es 2, lo que significa que se convierten hasta dos niveles de objetos anidados. Si su objeto tiene más niveles de anidamiento, puede manejarlo especificando una profundidad mayor. Pero tenga en cuenta que establecer una profundidad demasiado alta puede hacer que los datos JSON generados sean muy complejos.

-Compress: Si se especifica esta opción, la cadena JSON generada no contendrá espacios ni sangrías adicionales, lo que la hará más compacta. Esto es útil para reducir el tamaño de los datos JSON.

-EscapeHandling: Se utiliza para especificar cómo manejar los caracteres de escape al generar cadenas JSON. Los valores opcionales incluyen:

  • Default: utilice el método de procesamiento de escape predeterminado.
  • EscapeHtml: Escapar de caracteres HTML.
  • EscapeNonAscii: escapa de caracteres que no son 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

El resultado de ejecución es:

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

F.2 Comando ConvertFrom-Json

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

ConvertFrom-JsonSe utiliza para convertir cadenas con formato JSON en objetos personalizados o tablas hash. JSON es un formato de intercambio de datos comúnmente utilizado en sitios web. Este comando puede ayudarlo a convertir estos datos con formato JSON en objetos que sean fáciles de operar en PowerShell.

El formato de sintaxis de este comando es:

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

en:

  • -InputObject: Especifica la cadena JSON que se convertirá en un objeto JSON.
  • -AsHashtable: convierte JSON en un objeto de tabla hash. A partir de PowerShell 7.3, este objeto es OrderedHashtable y conserva el orden de las claves en JSON.
  • -Depth: establece la profundidad máxima permitida para la entrada JSON, el valor predeterminado es 1024.
  • -NoEnumerate: Especifica no enumerar la salida, utilizada para garantizar que ConvertTo-Jsonse puedan realizar viajes de ida y vuelta JSON.

ConvertFrom-JsonEl cmdlet convierte una cadena con formato JSON en un PSObject personalizado o un objeto de tabla hash, donde cada campo corresponde a un atributo de la cadena JSON. JSON se utiliza a menudo en sitios web para representar datos de objetos en forma de texto. Este cmdlet agrega propiedades a un nuevo objeto a medida que procesa cada línea de la cadena JSON.

El estándar JSON permite nombres de clave duplicados, pero no en los tipos PSObject y Hashtable. Por ejemplo, si la cadena JSON contiene claves duplicadas, este cmdlet solo usará la última clave. Vea ejemplos adicionales a continuación.

Para generar una cadena JSON a partir de cualquier objeto, utilice ConvertTo-Jsoncmdlets.

Ejemplo

Ejemplo 1: convertir un objeto DateTime en un objeto JSON

El siguiente comando usa el cmdlet ConvertTo-Jsonand ConvertFrom-Jsonpara Get-Dateconvertir el objeto DateTime obtenido del cmdlet en un objeto JSON y luego en un PSCustomObject.

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

Este ejemplo usa Select-Objectun cmdlet para obtener todas las propiedades de un objeto DateTime. Utiliza ConvertTo-Jsonun cmdlet para convertir el objeto DateTime en una cadena con formato JSON y luego usa ConvertFrom-Jsonel cmdlet para convertir la cadena con formato JSON en un objeto PSCustomObject.

Ejemplo 2: obtener una cadena JSON del servicio web y convertirla en un objeto de PowerShell

El siguiente comando usa Invoke-WebRequestun cmdlet para obtener una cadena JSON de un servicio web y luego usa ConvertFrom-Jsonel cmdlet para convertir el contenido JSON en un objeto que se puede administrar en 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

También puede utilizar Invoke-RestMethodcmdlets, que convertirán automáticamente el contenido JSON en objetos.

Ejemplo 3: convertir una cadena JSON en un objeto personalizado

Este ejemplo muestra cómo usar ConvertFrom-Jsoncmdlets para convertir un archivo JSON en un objeto personalizado de PowerShell.

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

Este comando utiliza Get-Contentun cmdlet para obtener una cadena de un archivo JSON. Use -Rawlos parámetros para devolver el archivo completo como un único objeto JSON y luego use el operador de canalización para enviar la cadena delimitada al ConvertFrom-Jsoncmdlet para convertirlo en un objeto personalizado.

Ejemplo 4: convertir una cadena JSON en una tabla hash

Este ejemplo muestra un ejemplo del uso -AsHashtablede modificadores para superar ConvertFrom-Jsonalgunas de las limitaciones de un comando.

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

La cadena JSON contiene dos pares clave-valor y las claves solo difieren en mayúsculas y minúsculas. Sin el interruptor, este comando informará un error.

Ejemplo 5: ida y vuelta de una cadena JSON que contiene una matriz de un solo elemento

Este ejemplo muestra cómo utilizar -NoEnumeratemodificadores para realizar un recorrido de ida y vuelta en una matriz JSON que contiene un solo elemento.

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

Una cadena JSON contiene una matriz que contiene un solo elemento. Sin el modificador, convertir JSON a PSObject y luego ConvertTo-Jsonvolver a convertir usando el comando dará como resultado un único número entero.

parámetro

  • -AsHashtable: convierte JSON en un objeto de tabla hash.
  • -Depth: Profundidad máxima permitida para la entrada JSON.
  • -InputObject: Cadena JSON que se convertirá en un objeto JSON.
  • -NoEnumerate: Especifica que la salida no debe enumerarse.

entrada y salida

  • Entrada: cadena JSON.
  • Salida: PSCustomObject (objeto personalizado) o OrderedHashtable (tabla hash ordenada).

Aviso

  • Este cmdlet se implementa mediante Newtonsoft Json.NET.
  • A partir de PowerShell 6, ConvertTo-Jsonse intenta convertir una cadena formateada como marca de tiempo en un valor DateTime.
  • El tipo PSObject mantendrá el orden de las propiedades igual que en la cadena JSON. A partir de PowerShell 7.3, AsHashtableel parámetro creará una OrderedHashtable, los pares clave-valor se agregan en el orden de la cadena JSON y la tabla hash ordenada mantendrá este orden.

Supongo que te gusta

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