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
-Depthimplicit 2: în loc de obiect apare un text ca"@{Nume=...}"sau"System.Collections.Hashtable". Mărește-Depthpentru structuri imbricate. - Un singur element care trebuia să fie tablou:
@($elev) | ConvertTo-Jsontot obiect dă, pentru că pipeline-ul desface tabloul. Folosește-AsArraysauConvertTo-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.