ConvertTo-Json în PowerShell

Formatare și conversie Windows PowerShell 3.0

Transformă obiecte PowerShell într-un șir JSON, de exemplu pentru un fișier de configurare sau corpul unei cereri către un API.

Sintaxă
ConvertTo-Json [-InputObject] <Object> [-Depth <int>] [-Compress] [-AsArray] [-EnumsAsStrings] [-EscapeHandling <StringEscapeHandling>]

Ce face ConvertTo-Json

ConvertTo-Json transformă proprietățile în chei JSON și valorile în valori JSON; metodele se ignoră. Mai multe obiecte primite prin pipeline devin un tablou JSON, iar un singur obiect devine un obiect JSON (cu -AsArray e pus totuși între paranteze drepte). În PowerShell 7 rezultatul este indentat cu două spații, iar -Compress îl scrie pe un singur rând.

-Depth are valoarea implicită 2: obiectele aflate mai adânc de două niveluri sunt înlocuite cu textul lor (de exemplu @{Nume=...}). Din PowerShell 7.1 apare un avertisment când se întâmplă asta; în Windows PowerShell 5.1 trunchierea are loc fără avertisment. Pentru date imbricate mărește valoarea, până la maximum 100.

Implicit sunt escapate doar caracterele de control, deci „ș” și „ț” rămân ca atare; -EscapeHandling (din 6.2) poate escapa și caracterele non-ASCII sau HTML. -EnumsAsStrings scrie valorile enumerărilor ca text, nu ca numere.

Parametri

Parametru Descriere
-InputObject Obiectul convertit; de obicei vine prin pipeline.
-Depth Câte niveluri de obiecte imbricate se includ; implicit 2, maximum 100.
-Compress Fără spații și indentare, pe un singur rând.
-AsArray Pune rezultatul între [ ] chiar dacă e un singur obiect.
-EnumsAsStrings Enumerările devin șiruri (de exemplu "Running" în loc de 4).
-EscapeHandling Default, EscapeNonAscii sau EscapeHtml (PowerShell 6.2+).

Ce returnează

Un șir de caractere (string) cu textul JSON.

Exemple

Exemplul 1: Un obiect cu un tablou

Proprietatea Note devine un tablou JSON; diacriticele rămân neschimbate.

$elev = [pscustomobject]@{ Nume = 'Ana'; Oras = 'Iași'; Note = @(9, 10, 8) }
$elev | ConvertTo-Json

Ieșire în terminal

{
  "Nume": "Ana",
  "Oras": "Iași",
  "Note": [
    9,
    10,
    8
  ]
}

Exemplul 2: JSON compact, ca obiect și ca tablou

-Compress elimină spațiile; -AsArray adaugă parantezele drepte.

$elev = [pscustomobject]@{ Nume = 'Ana'; Oras = 'Iași'; Note = @(9, 10, 8) }
$elev | ConvertTo-Json -Compress
$elev | ConvertTo-Json -Compress -AsArray

Ieșire în terminal

{"Nume":"Ana","Oras":"Iași","Note":[9,10,8]}
[{"Nume":"Ana","Oras":"Iași","Note":[9,10,8]}]

Exemplul 3: -Depth: date imbricate trunchiate

Strada se află pe nivelul 3, peste limita implicită de 2, și devine text; cu -Depth 5 se păstrează întreagă.

$comanda = [pscustomobject]@{
    Id     = 1001
    Client = [pscustomobject]@{
        Nume   = 'Ana'
        Adresa = [pscustomobject]@{
            Oras   = 'Iași'
            Strada = [pscustomobject]@{ Nume = 'Lăpușneanu'; Nr = 12 }
        }
    }
}
$comanda | ConvertTo-Json
$comanda | ConvertTo-Json -Depth 5 -Compress

Ieșire în terminal

WARNING: Resulting JSON is truncated as serialization has exceeded the set depth of 2.
{
  "Id": 1001,
  "Client": {
    "Nume": "Ana",
    "Adresa": {
      "Oras": "Iași",
      "Strada": "@{Nume=Lăpușneanu; Nr=12}"
    }
  }
}
{"Id":1001,"Client":{"Nume":"Ana","Adresa":{"Oras":"Iași","Strada":{"Nume":"Lăpușneanu","Nr":12}}}}

Greșeli frecvente

  • Date pierdute din cauza -Depth implicit 2: în loc de obiect apare un text ca "@{Nume=...}" sau "System.Collections.Hashtable". Mărește -Depth pentru structuri imbricate.
  • Un singur element care trebuia să fie tablou: @($elev) | ConvertTo-Json tot obiect dă, pentru că pipeline-ul desface tabloul. Folosește -AsArray sau ConvertTo-Json -InputObject @($elev).
  • Folosirea hashtable-ului simplu @{} când contează ordinea cheilor: ordinea nu e garantată. Folosește [ordered]@{} sau [pscustomobject]@{}.

Comenzi înrudite

  • ConvertFrom-Json: Transformă un text JSON în obiecte PowerShell (sau hashtable-uri), ale căror câmpuri le citești cu punct.
  • Hashtable (@{}): Un hashtable ține perechi cheie-valoare; [ordered] păstrează ordinea cheilor, iar [pscustomobject] transformă perechile într-un obiect.
  • Invoke-RestMethod: Apelează un API REST și transformă automat răspunsul JSON sau XML în obiecte PowerShell, gata de filtrat și afișat.
  • Set-Content: Scrie text într-un fișier și înlocuiește tot conținutul existent; creează fișierul dacă nu există.
  • Export-Csv: Salvează obiectele într-un fișier CSV: un rând de antet cu numele proprietăților și câte un rând pentru fiecare obiect.