ConvertFrom-Json
JSON formátumú sztringet alakít át egyéni objektummá vagy kivonattáblává.
Syntax
ConvertFrom-Json
[-InputObject] <String>
[-AsHashtable]
[-Depth <Int32>]
[-NoEnumerate]
[<CommonParameters>]
Description
A ConvertFrom-Json
parancsmag egy JavaScript Object Notation (JSON) formátumú sztringet alakít át egyéni PSObject vagy Hashtable objektummá, amely a JSON-sztring minden mezőjéhez rendelkezik tulajdonsággal.
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 a PSObject és a Hashtable típusok esetében tiltottak. 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.
Feljegyzés
A PowerShell 6-tól kezdve a parancsmag támogatja a JSON-t megjegyzésekkel. A JSON-megjegyzések két perjellel (//
) kezdődnek. A JSON-megjegyzéseket a parancsmag nem rögzíti az objektumok kimenetében. A PowerShell 6 előtt hiba történt, ConvertFrom-Json
amikor JSON-megjegyzést észlelt.
Példák
1. példa: DateTime-objektum átalakítása JSON-objektummá
Ez a parancs a parancsmagokkal és parancsmagokkal ConvertTo-Json
konvertál egy DateTime-objektumot a Get-Date
parancsmagból JSON-objektummá, majd PSCustomObject-gé.ConvertFrom-Json
Get-Date | Select-Object -Property * | ConvertTo-Json | ConvertFrom-Json
DisplayHint : 2
DateTime : Friday, January 13, 2012 8:06:31 PM
Date : 1/13/2012 8:00:00 AM
Day : 13
DayOfWeek : 5
DayOfYear : 13
Hour : 20
Kind : 2
Millisecond : 400
Minute : 6
Month : 1
Second : 31
Ticks : 634620819914009002
TimeOfDay : @{Ticks=723914009002; Days=0; Hours=20; Milliseconds=400; Minutes=6; Seconds=31; TotalDays=0.83786343634490734; TotalHours=20.108722472277776; TotalMilliseconds=72391400.900200009; TotalMinutes=1206.5233483366667;TotalSeconds=72391.4009002}
Year : 2012
A példa a Select-Object
parancsmaggal lekéri a DateTime objektum összes tulajdonságát. A parancsmaggal ConvertTo-Json
átalakítja a DateTime objektumot egy JSON-objektumként formázott sztringgé, a ConvertFrom-Json
parancsmag pedig a JSON-formátumú sztring PSCustomObject objektummá alakításához.
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 parancsmaggal átalakítja a ConvertFrom-Json
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ájlt egyéni PowerShell-objektummá a ConvertFrom-Json
parancsmaggal.
Get-Content -Raw JsonFile.JSON | ConvertFrom-Json
A parancs a Get-Content parancsmagot használja a JSON-fájl sztringjeinek lekéréséhez. 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ó képes leküzdeni 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 konvertálja a JSON-t PSObject-re, majd a paranccsal visszaalakítva ConvertTo-Json
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 kivonatoló.
Több olyan forgatókönyv is létezik, ahol a parancsmag bizonyos korlátait ConvertFrom-Json
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űk érzéketlenül azonos kulcsait tartalmazza.
- A kapcsoló nélkül a parancsmag hibát jelez, amikor a JSON üres sztringet tartalmazó kulcsot tartalmaz. A PSCustomObject nem tartalmazhat üres sztringeket tartalmazó tulajdonságneveket. Ez például a fájlokban
project.lock.json
fordulhat elő. - A kivonattáblák gyorsabban feldolgozhatók bizonyos adatstruktúrák esetében.
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | 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.
Típus: | Int32 |
Position: | Named |
Alapértelmezett érték: | None |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | 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. Sztringet is befűzhet a parancsba ConvertFrom-Json
.
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 lehet $null
.
Típus: | String |
Position: | 0 |
Alapértelmezett érték: | None |
Kötelező: | True |
Folyamatbemenet elfogadása: | True |
Helyettesítő karakterek elfogadása: | 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 ciklikusan meg lehet rántni.ConvertTo-Json
Típus: | SwitchParameter |
Position: | Named |
Alapértelmezett érték: | False |
Kötelező: | False |
Folyamatbemenet elfogadása: | False |
Helyettesítő karakterek elfogadása: | False |
Bevitelek
A JSON-sztringeket a parancsra ConvertFrom-Json
csövezheti.
Kimenetek
PSCustomObject
Jegyzetek
Ez a parancsmag a Newtonsoft Json.NET használatával lett implementálva.
A PowerShell 6-tól ConvertTo-Json
kezdve megpróbálja időbélyegként formázott sztringeket DateTime-értékekké alakítani. A konvertált érték egy [datetime]
olyan példány, amelynek Kind
tulajdonsága az alábbiak szerint van beállítva:
Unspecified
, ha nincs időzóna-információ a bemeneti sztringben.Utc
, ha az időzóna adatai záró jellegűekZ
.Local
, ha az időzóna-információ egy záró UTC-eltolásként van megadva, mint a+02:00
. Az eltolás megfelelően konvertá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.
A PSObject típus megtartja a tulajdonságok JSON-sztringben bemutatott sorrendjét. A PowerShell 7.3-tól kezdve az AsHashtable paraméter létrehoz egy OrderedHashtablet. A kulcs-érték párok a JSON-sztringben bemutatott sorrendben lesznek hozzáadva. Az OrderedHashtable megőrzi ezt a sorrendet.