ConvertFrom-Json în PowerShell

Formatare și conversie Windows PowerShell 3.0

Transformă un text JSON în obiecte PowerShell (sau hashtable-uri), ale căror câmpuri le citești cu punct.

Sintaxă
ConvertFrom-Json [-InputObject] <string> [-AsHashtable] [-Depth <int>] [-NoEnumerate] [-DateKind <JsonDateKind>]

Ce face ConvertFrom-Json

ConvertFrom-Json primește un șir JSON și întoarce un PSCustomObject cu câte o proprietate pentru fiecare cheie; obiectele imbricate devin tot obiecte, iar tablourile devin tablouri. Un tablou JSON de obiecte iese ca obiecte separate în pipeline, deci le poți filtra direct cu Where-Object.

Un fișier JSON se citește cu Get-Content -Raw, ca să ajungă la cmdlet ca un singur șir. Din PowerShell 6 sunt acceptate comentariile în JSON, iar textele care arată ca o dată calendaristică sunt convertite la DateTime; din 7.5, -DateKind controlează această conversie (String le păstrează ca text).

-AsHashtable (din PowerShell 6.0) întoarce un hashtable în locul obiectului; din 7.3 este un OrderedHashtable, care păstrează ordinea cheilor. E util pentru chei care diferă doar prin majuscule sau pentru chei goale, pe care un obiect nu le poate avea. -Depth (din 6.2) limitează adâncimea acceptată, implicit 1024.

Parametri

Parametru Descriere
-InputObject Textul JSON; de obicei vine prin pipeline.
-AsHashtable Întoarce un hashtable (ordonat din 7.3) în loc de PSCustomObject (PowerShell 6.0+).
-Depth Adâncimea maximă permisă a JSON-ului; implicit 1024 (PowerShell 6.2+).
-NoEnumerate Trimite un tablou JSON ca un singur obiect, fără să-l desfacă în elemente.
-DateKind Cum se convertesc datele: Default, Local, Utc, Offset, String (PowerShell 7.5+).

Ce returnează

Obiecte PSCustomObject sau, cu -AsHashtable, un OrderedHashtable.

Exemple

Exemplul 1: Citirea câmpurilor dintr-un JSON

După conversie, cheile JSON sunt proprietăți obișnuite.

$json = '{ "Nume": "Ana", "Oras": "Iași", "Note": [9, 10, 8] }'
$elev = $json | ConvertFrom-Json
$elev.Nume
$elev.Note.Count

Ieșire în terminal

Ana
3

Exemplul 2: Un fișier JSON cu o listă de comenzi

-Raw citește tot fișierul ca un singur șir; fiecare element din tablou devine un obiect.

Set-Content -Path .\comenzi.json -Value '[{"Client":"Ana","Total":120},{"Client":"Mihai","Total":75}]'
$comenzi = Get-Content -Path .\comenzi.json -Raw | ConvertFrom-Json
$comenzi
($comenzi | Measure-Object -Property Total -Sum).Sum

Ieșire în terminal

Client Total
------ -----
Ana      120
Mihai     75

195

Exemplul 3: -AsHashtable pentru configurări

Din PowerShell 7.3 hashtable-ul este ordonat; valorile numerice rămân numere.

$config = '{ "server": "exemplu.ro", "port": 8080 }' | ConvertFrom-Json -AsHashtable
$config.GetType().Name
$config['port'] + 1

Ieșire în terminal

OrderedHashtable
8081

Greșeli frecvente

  • Chei care diferă doar prin majuscule ("key" și "Key"): fără -AsHashtable nu pot exista ca proprietăți separate. Folosește -AsHashtable.
  • Cu -AsHashtable cheile țin cont de majuscule (de aceea pot coexista key și Key): $config['Port'] nu găsește cheia port. Pe un PSCustomObject, $elev.nume și $elev.Nume sunt aceeași proprietate.
  • Texte ca "2026-10-25T10:00:00" devin automat DateTime în PowerShell 7; dacă ai nevoie de textul original, folosește -DateKind String (7.5+).
  • -AsHashtable și -Depth nu există în Windows PowerShell 5.1.

Comenzi înrudite

  • ConvertTo-Json: Transformă obiecte PowerShell într-un șir JSON, de exemplu pentru un fișier de configurare sau corpul unei cereri către un API.
  • 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.
  • Get-Content: Citește conținutul unui fișier ca listă de linii (sau ca un singur șir cu -Raw); poate afișa primele sau ultimele linii și urmări un log.
  • Where-Object: Filtrează obiectele din pipeline și le lasă să treacă doar pe cele care îndeplinesc o condiție.