Megosztás a következőn keresztül:


ConvertFrom-Json

JSON formátumú sztringet alakít át egyéni objektummá vagy kivonattáblává.

Syntax

ConvertFrom-Json
                [-InputObject] <String>
                [-AsHashtable]
                [-DateKind <JsonDateKind>]
                [-Depth <Int32>]
                [-NoEnumerate]
                [<CommonParameters>]

Description

A ConvertFrom-Json parancsmag egy JavaScript Object Notation (JSON) formátumú szöveget alakít át egyéni PSObject vagy hastáblázat objektummá, amely rendelkezik tulajdonsággal a JSON-szöveg minden mezőjéhez. 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.

Jegyzet

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 parancsmagját használja, hogy megszerezze 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 hasító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 objektumban csak a kis- és nagybetűket figyelmen kívül hagyva azonos utolsó kulcs szerepel.
  • 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.json fájlokban 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

-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:

  • Default
  • Local
  • Utc
  • Offset
  • String

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.

Típus:Microsoft.PowerShell.Commands.JsonDateKind
Elfogadott értékek:Default, Local, Utc, Offset, String
Position:Named
Alapértelmezett érték:Default
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. A karakterláncot is átirányíthatja 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.

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 ConvertTo-Jsonkeresztül lehet kerekíteni.

Típus:SwitchParameter
Position:Named
Alapértelmezett érték:False
Kötelező:False
Folyamatbemenet elfogadása:False
Helyettesítő karakterek elfogadása:False

Bevitelek

String

Egy JSON-sztringet átirányíthat a ConvertFrom-Json-ra.

Kimenetek

PSCustomObject

OrderedHashtable

Jegyzetek

Ez a parancsmag a Newtonsoft Json.NET használatával lett implementálva.

A PowerShell 6-tól kezdve ConvertTo-Json próbálja konvertálni az időbélyegként formázott karakterláncokat DateTime értékekké.

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 adatai a végén található Z, a Json.NET szerializáló átalakítja az időbélyeget UTC értékre.
    • 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 eltérést tartalmaz, az eltolás a hívó által konfigurált időzónára konvertálódik. 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 – Átalakítja az időbélyeget egy [DateTimeOffset]-példányra, megőrizve az eredeti sztring időzóna-eltolását abban a példányban. 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.