ConvertFrom-Json
JSON formátumú sztringet alakít át egyéni objektummá vagy kivonattáblává.
Syntax
Default (Alapértelmezett)
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-DateKind <JsonDateKind>]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
A ConvertFrom-Json parancsmag egy JavaScript Object Notation (JSON) formátumú karakterláncot alakít át egyéni PSObject vagy Hash-tábla objektummá, amelyben minden mezőhöz tartozik egy tulajdonság a JSON karakterláncban.
A JSON-t gyakran használják a webhelyek az objektumok szöveges ábrázolására. A parancsmag hozzáadja a tulajdonságokat az új objektumhoz, miközben feldolgozza a JSON-sztring egyes sorait.
A JSON szabvány lehetővé teszi a duplikált kulcsneveket, amelyek PSObject és kivonatoló típusok esetében tilosak. Ha például a JSON-sztring ismétlődő kulcsokat tartalmaz, a parancsmag csak az utolsó kulcsot használja. Lásd az alábbi példákat.
Ha JSON-sztringet szeretne létrehozni bármely objektumból, használja a ConvertTo-Json parancsmagot.
Ezt a parancsmagot a PowerShell 3.0-ban vezettük be.
Megjegyzés:
A Windows PowerShell 5.1-ben ConvertFrom-Json hibát adott vissza, amikor JSON-megjegyzést észlelt. A PowerShell 6-os és újabb verzióiban a parancsmag támogatja a JSON-t megjegyzésekkel. A JSON-megjegyzéseket a parancsmag nem rögzíti az objektumok kimenetében. További információt a about_Comments cikk JSON-megjegyzések szakaszában talál.
Példák
1. példa: DateTime-objektum átalakítása JSON-objektummá
Ez a parancs a ConvertTo-Json és ConvertFrom-Json cmdletek segítségével először egy cmdletból származó Get-Date objektumot JSON-objektummá, majd egy PSCustomObject-vé konvertál.
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Monday, January 29, 2024 3:10:26 PM
Date : 1/29/2024 12:00:00 AM
Day : 29
DayOfWeek : 1
DayOfYear : 29
Hour : 15
Kind : 2
Millisecond : 931
Microsecond : 47
Nanosecond : 600
Minute : 10
Month : 1
Second : 26
Ticks : 638421378269310476
TimeOfDay : @{Ticks=546269310476; Days=0; Hours=15; Milliseconds=931; Microseconds=47;
Nanoseconds=600; Minutes=10; Seconds=26; TotalDays=0.632256146384259;
TotalHours=15.1741475132222; TotalMilliseconds=54626931.0476;
TotalMicroseconds=54626931047.6; TotalNanoseconds=54626931047600;
TotalMinutes=910.448850793333; TotalSeconds=54626.9310476}
Year : 2024
A példa a Select-Object parancsmaggal lekéri a DateTime objektum összes tulajdonságát. A ConvertTo-Json parancsmaggal konvertálja a DateTime objektumot JSON-objektumként formázott sztringgé, a ConvertFrom-Json parancsmag pedig a JSON-formátumú sztringet PSCustomObject objektummá alakítja.
2. példa: JSON-sztringek lekérése egy webszolgáltatásból, és powerShell-objektumokká alakítása
Ez a parancs a Invoke-WebRequest parancsmaggal lekéri a JSON-sztringeket egy webszolgáltatásból, majd a ConvertFrom-Json parancsmaggal konvertálja a JSON-tartalmat a PowerShellben kezelhető objektumokká.
# Ensures that Invoke-WebRequest uses TLS 1.2
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$j = Invoke-WebRequest 'https://api.github.com/repos/PowerShell/PowerShell/issues' |
ConvertFrom-Json
Használhatja a Invoke-RestMethod parancsmagot is, amely automatikusan objektummá alakítja a JSON-tartalmat.
3. példa: JSON-sztring átalakítása egyéni objektummá
Ez a példa bemutatja, hogyan konvertálhat JSON-fájlokat egyéni PowerShell-objektummá a ConvertFrom-Json parancsmaggal.
Get-Content -Raw JsonFile.json | ConvertFrom-Json
A parancs a Get-Content parancsmagot használja, hogy kinyerje a sztringeket egy JSON-fájlban. A Raw paraméter a teljes fájlt egyetlen JSON-objektumként adja vissza. Ezután a folyamatkezelővel elküldi a tagolt sztringet a ConvertFrom-Json parancsmagnak, amely egyéni objektummá alakítja.
4. példa: JSON-sztring konvertálása kivonattáblává
Ez a parancs egy példát mutat be, ahol a -AsHashtable kapcsoló leküzdheti a parancs korlátait.
'{ "key":"value1", "Key":"value2" }' | ConvertFrom-Json -AsHashtable
A JSON-sztring két kulcsértékpárt tartalmaz, amelyek kulcsai csak a burkolatban különböznek. A kapcsoló nélkül a parancs hibát jelzett volna.
5. példa: Egyetlen elemtömb körbejárása
Ez a parancs egy példát mutat be, ahol a -NoEnumerate kapcsolóval egyetlen elemből álló JSON-tömböt lehet kerekíteni.
Write-Output "With -NoEnumerate: $('[1]' | ConvertFrom-Json -NoEnumerate |
ConvertTo-Json -Compress)"
Write-Output "Without -NoEnumerate: $('[1]' | ConvertFrom-Json |
ConvertTo-Json -Compress)"
With -NoEnumerate: [1]
Without -NoEnumerate: 1
A JSON-sztring egyetlen elemet tartalmazó tömböt tartalmaz. A kapcsoló nélkül a JSON psObjectre konvertálása, majd a ConvertTo-Json paranccsal való visszaalakítása egyetlen egész számot eredményez.
Paraméterek
-AsHashtable
A JSON-t kivonattábla-objektummá alakítja. Ezt a kapcsolót a PowerShell 6.0-ban vezettük be. A PowerShell 7.3-tól kezdve az objektum egy OrderedHashtable, és megőrzi a kulcsok sorrendjét a JSON-ból. A korábbi verziókban az objektum egy hash tábla.
Több forgatókönyv is létezik, amelyekben a ConvertFrom-Json parancsmag bizonyos korlátait leküzdheti.
- E kapcsoló nélkül, ha egy JSON-objektumban két vagy több kulcs érzéketlenül azonos a kis- és nagybetűk között, a rendszer azonos kulcsként kezeli őket. Ebben az esetben a konvertált objektum csak a kis- és nagybetűkre érzéketlenül azonos kulcsok közül az utolsót tartalmazza.
- A kapcsoló nélkül a parancsmag hibát jelez, amikor a JSON üres sztringet tartalmazó kulcsot tartalmaz.
PSCustomObject nem tartalmazhat üres sztringeket tartalmazó tulajdonságneveket. Ez például
project.lock.jsonfájlokban fordulhat elő. - A kivonattáblák gyorsabban feldolgozhatók bizonyos adatstruktúrák esetében.
Paramétertulajdonságok
| Típus: | SwitchParameter |
| Alapértelmezett érték: | False |
| Támogatja a helyettesítő karaktereket: | False |
| DontShow: | False |
Paraméterkészletek
(All)
| Position: | Named |
| Kötelező: | False |
| Folyamatból származó érték: | False |
| Folyamatból származó érték tulajdonságnév alapján: | False |
| Fennmaradó argumentumokból származó érték: | False |
-DateKind
Megadja a JSON-sztring dátum-időértékeinek elemzésekor használt metódust. A paraméter elfogadható értékei a következők:
DefaultLocalUtcOffsetString
Arról, hogy ezek az értékek hogyan befolyásolják az átalakítást, a NOTEScímű cikkben talál további információt.
Ez a paraméter a PowerShell 7.5-ben lett bevezetve.
Paramétertulajdonságok
| Típus: | Microsoft.PowerShell.Commands.JsonDateKind |
| Alapértelmezett érték: | Default |
| Elfogadott értékek: | Default, Local, Utc, Offset, String |
| Támogatja a helyettesítő karaktereket: | False |
| DontShow: | False |
Paraméterkészletek
(All)
| Position: | Named |
| Kötelező: | False |
| Folyamatból származó érték: | False |
| Folyamatból származó érték tulajdonságnév alapján: | False |
| Fennmaradó argumentumokból származó érték: | False |
-Depth
Lekéri vagy beállítja a JSON-bemenet megengedett legnagyobb mélységét. Az alapértelmezett érték 1024.
Ez a paraméter a PowerShell 6.2-ben lett bevezetve.
Paramétertulajdonságok
| Típus: | Int32 |
| Alapértelmezett érték: | None |
| Támogatja a helyettesítő karaktereket: | False |
| DontShow: | False |
Paraméterkészletek
(All)
| Position: | Named |
| Kötelező: | False |
| Folyamatból származó érték: | False |
| Folyamatból származó érték tulajdonságnév alapján: | False |
| Fennmaradó argumentumokból származó érték: | False |
-InputObject
Megadja a JSON-objektumokká konvertálandó JSON-sztringeket. Adjon meg egy változót, amely tartalmazza a sztringet, vagy írjon be egy parancsot vagy kifejezést, amely lekéri a sztringet. Karakterláncot is továbbíthat a ConvertFrom-Json-ra.
Az InputObject paraméter megadása kötelező, de értéke lehet üres sztring. Ha a bemeneti objektum üres sztring, ConvertFrom-Json nem hoz létre kimenetet. Az InputObject értéke nem $null.
Paramétertulajdonságok
| Típus: | String |
| Alapértelmezett érték: | None |
| Támogatja a helyettesítő karaktereket: | False |
| DontShow: | False |
Paraméterkészletek
(All)
| Position: | 0 |
| Kötelező: | True |
| Folyamatból származó érték: | True |
| Folyamatból származó érték tulajdonságnév alapján: | False |
| Fennmaradó argumentumokból származó érték: | False |
-NoEnumerate
Azt adja meg, hogy a kimenet nincs enumerálva.
A paraméter beállítása esetén a tömbök egyetlen objektumként lesznek elküldve ahelyett, hogy minden elemet külön küldenek. Ez garantálja, hogy a JSON-t ConvertTo-Json-on keresztül körbe lehessen alakítani.
Paramétertulajdonságok
| Típus: | SwitchParameter |
| Alapértelmezett érték: | False |
| Támogatja a helyettesítő karaktereket: | False |
| DontShow: | False |
Paraméterkészletek
(All)
| Position: | Named |
| Kötelező: | False |
| Folyamatból származó érték: | False |
| Folyamatból származó érték tulajdonságnév alapján: | False |
| Fennmaradó argumentumokból származó érték: | False |
CommonParameters
Ez a parancsmag a következő gyakori paramétereket támogatja: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction és -WarningVariable. További információért lásd about_CommonParameters.
Bevitelek
String
Küldhetsz egy JSON-sztringet a ConvertFrom-Json-ba.
Kimenetek
PSCustomObject
OrderedHashtable
Jegyzetek
Ez a parancsmag a Newtonsoft Json.NET használatával lett implementálva.
A PowerShell 6-tól kezdődően a ConvertTo-Json megpróbálja az időbélyegként formázott karakterláncokat DateTime értékekké konvertálni.
A PowerShell 7.5 hozzáadta a DateKind paramétert, amely lehetővé teszi az időbélyeg-sztring konvertálásának szabályozását. A paraméter a következő értékeket fogadja el:
-
Default– Átalakítja az időbélyeget egy[datetime]-példányra az alábbi szabályok szerint:- Ha a bemeneti sztringben nincs időzóna-információ, a Json.NET szerializáló meghatározatlan időértékként konvertálja az értéket.
- Ha az időzóna információ végén található
Z, a Json.NET szerializáló az időbélyeget UTC értékre alakítja át. - Ha az időbélyeg olyan UTC-eltolást tartalmaz, mint
+02:00, az eltolás a hívó konfigurált időzónájára lesz konvertálva. Az alapértelmezett kimeneti formázás nem jelzi az eredeti időzóna-eltolást.
-
Local– Az időbélyeget[datetime]példánnyá alakítja át helyi idő szerint. Ha az időbélyeg UTC-eltolást tartalmaz, az eltolás átkonvertálódik a hívó konfigurált időzónájára. Az alapértelmezett kimeneti formázás nem jelzi az eredeti időzóna-eltolást. -
Utc– Átalakítja az értéket egy[datetime]-példányra UTC idő szerint. -
Offset– Az időbélyeget átalakítja egy[DateTimeOffset]-példánnyá, amelyben megőrződik az eredeti szöveg időzóna-eltolása. Ha a nyers sztring nem tartalmazott időzón-eltolást, a DateTimeOffset érték a helyi időzónában lesz megadva. -
String– A[string]példány értékét megőrzi. Ez biztosítja, hogy minden egyéni elemzési logika alkalmazható legyen a nyers sztringértékre.
A PSObject típus a JSON-sztringben bemutatott tulajdonságok sorrendjét tartja karban. A PowerShell 7.3-tól kezdve a AsHashtable paraméter létrehoz egy OrderedHashtable. A kulcs-érték párok a JSON-sztringben bemutatott sorrendben lesznek hozzáadva. A OrderedHashtable megőrzi ezt a sorrendet.