Test-Json
Überprüft, ob es sich bei einer Zeichenfolge um ein gültiges JSON-Dokument handelt.
Syntax
Test-Json
[-Json] <String>
[<CommonParameters>]
Test-Json
[-Json] <string>
[-Schema] <string>
[<CommonParameters>]
Test-Json
[-Json] <string>
[-SchemaFile] <string>
[<CommonParameters>]
Test-Json
[-Path] <string>
[<CommonParameters>]
Test-Json
[-Path] <string>
[-Schema] <string>
[<CommonParameters>]
Test-Json
[-Path] <string>
[-SchemaFile] <string>
[<CommonParameters>]
Test-Json
[-LiteralPath] <string>
[<CommonParameters>]
Test-Json
[-LiteralPath] <string>
[-Schema] <string>
[<CommonParameters>]
Test-Json
[-LiteralPath] <string>
[-SchemaFile] <string>
[<CommonParameters>]
Beschreibung
Das Test-Json
Cmdlet testet, ob es sich bei einer Zeichenfolge um ein gültiges JSON-Dokument (JavaScript Object Notation) handelt und optional das JSON-Dokument anhand eines bereitgestellten Schemas überprüfen kann.
Die überprüfte Zeichenfolge kann dann mit dem ConvertFrom-Json
Cmdlet verwendet werden, um eine JSON-formatierte Zeichenfolge in ein JSON-Objekt zu konvertieren, das einfach in PowerShell verwaltet oder an ein anderes Programm oder Webdienst gesendet wird, das auf JSON-Eingaben zugreift.
Viele Websites verwenden JSON statt XML, um Daten für die Kommunikation zwischen Servern und webbasierten Apps zu serialisieren.
Das Cmdlet wurde in PowerShell 6.1 eingeführt
Beispiele
Beispiel 1: Testen, ob ein Objekt gültiger JSON-Code ist
In diesem Beispiel wird getestet, ob es sich bei der Eingabezeichenfolge um ein gültiges JSON-Dokument handelt.
'{"name": "Ashley", "age": 25}' | Test-Json
True
Beispiel 2: Testen eines Objekts anhand eines bereitgestellten Schemas
In diesem Beispiel wird eine Zeichenfolge mit einem JSON-Schema verwendet und mit einer Eingabezeichenfolge verglichen.
$schema = @'
{
"definitions": {},
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "http://example.com/root.json",
"type": "object",
"title": "The Root Schema",
"required": [
"name",
"age"
],
"properties": {
"name": {
"$id": "#/properties/name",
"type": "string",
"title": "The Name Schema",
"default": "",
"examples": [
"Ashley"
],
"pattern": "^(.*)$"
},
"age": {
"$id": "#/properties/age",
"type": "integer",
"title": "The Age Schema",
"default": 0,
"examples": [
25
]
}
}
}
'@
'{"name": "Ashley", "age": "25"}' | Test-Json -Schema $schema
Test-Json:
Line |
35 | '{"name": "Ashley", "age": "25"}' | Test-Json -Schema $schema
| ~~~~~~~~~~~~~~~~~~~~~~~~~
| The JSON is not valid with the schema: Value is "string" but should be "integer" at '/age'
False
In diesem Beispiel wird ein Fehler angezeigt, da das Schema eine ganze Zahl für das Alter erwartet, aber die von uns getestete JSON-Eingabe verwendet stattdessen einen Zeichenfolgenwert.
Weitere Informationen finden Sie unter JSON-Schema.
Beispiel 3: Testen eines Objekts anhand eines Schemas aus datei
Das JSON-Schema kann mithilfe des $ref
Schlüsselworts auf Definitionen verweisen. Der $ref
Kann in einen URI aufgelöst werden, der auf eine andere Datei verweist. Der SchemaFile-Parameter akzeptiert Literalpfad zur JSON-Schemadatei und ermöglicht es JSON-Dateien, anhand solcher Schemas zu überprüfen.
In diesem Beispiel verweisen die schema.json
Datei auf definitions.json
.
Get-Content schema.json
{
"description":"A person",
"type":"object",
"properties":{
"name":{
"$ref":"definitions.json#/definitions/name"
},
"hobbies":{
"$ref":"definitions.json#/definitions/hobbies"
}
}
}
Get-Content definitions.json
{
"definitions":{
"name":{
"type":"string"
},
"hobbies":{
"type":"array",
"items":{
"type":"string"
}
}
}
}
'{"name": "James", "hobbies": [".NET", "Blogging"]}' | Test-Json -SchemaFile 'schema.json'
True
Weitere Informationen finden Sie unter Strukturieren eines komplexen Schemas.
Parameter
-Json
Gibt die JSON-Zeichenfolge an, die auf Gültigkeit getestet werden soll. Geben Sie eine Variable ein, die die Zeichenfolge enthält, oder geben Sie einen Befehl oder Ausdruck ein, der die Zeichenfolge abruft. Sie können auch eine Zeichenfolge an Test-Json
.
Der Json-Parameter ist erforderlich.
Typ: | String |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-LiteralPath
Gibt einen Pfad zu einer JSON-Datei an. Der Wert von LiteralPath wird genau so verwendet, wie er eingegeben wird. Es werden keine Zeichen als Platzhalter interpretiert. Wenn der Pfad Escapezeichen enthält, müssen Sie ihn in einfache Anführungszeichen einschließen. Einfache Anführungszeichen weisen PowerShell an, keine Zeichen als Escapesequenzen zu interpretieren.
Dieser Parameter wurde in PowerShell 7.4 hinzugefügt.
Typ: | String |
Aliase: | PSPath, LP |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | False |
-Path
Gibt den Pfad zu einer JSON-Datei an. Dieses Cmdlet ruft das Element an der angegebenen Position ab. Wildcardzeichen sind zulässig, das Muster muss jedoch in eine einzelne Datei aufgelöst werden.
Dieser Parameter wurde in PowerShell 7.4 hinzugefügt.
Typ: | String |
Position: | 0 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | True |
Platzhalterzeichen akzeptieren: | True |
-Schema
Gibt ein Schema an, mit dem die JSON-Eingabe überprüft werden soll. Wenn übergeben, wird überprüft, ob die JSON-Eingabe der vom Schemaparameter angegebenen Spezifikation entspricht und nur zurückgegeben $true
wird, Test-Json
wenn die Eingabe dem bereitgestellten Schema entspricht.
Weitere Informationen finden Sie unter JSON-Schema.
Typ: | String |
Position: | 1 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
-SchemaFile
Gibt eine Schemadatei an, die zum Überprüfen der JSON-Eingabe verwendet wird. Bei Verwendung wird die Test-Json
Rückgabe $true
nur zurückgegeben, wenn die JSON-Eingabe dem schema entspricht, das in der durch den SchemaFile-Parameter angegebenen Datei definiert ist.
Weitere Informationen finden Sie unter JSON-Schema.
Typ: | String |
Position: | 1 |
Standardwert: | None |
Erforderlich: | True |
Pipelineeingabe akzeptieren: | False |
Platzhalterzeichen akzeptieren: | False |
Eingaben
Sie können eine JSON-Zeichenfolge an dieses Cmdlet weiterleiten.
Ausgaben
Boolean
Dieses Cmdlet gibt zurück $true
, wenn der JSON-Code gültig und andernfalls $false
gültig ist.
Hinweise
Seit PowerShell 6 verwendet PowerShell die Newtonsoft.Json-Assemblys für JSON-Funktionen. Newtonsofts Implementierung enthält mehrere Erweiterungen für den JSON-Standard, z. B. Unterstützung für Kommentare und Die Verwendung einzelner Anführungszeichen. Eine vollständige Liste der Features finden Sie in der Newtonsoft-Dokumentation unter https://www.newtonsoft.com/json.
Ab PowerShell 7.4 Test-Json
verwendet System.Text.Json für die JSON-Analyse und JsonSchema.NET für die Schemaüberprüfung.
Mit diesen Änderungen: Test-Json
- Unterstützt entwurfs 4-Schemas nicht mehr
- Unterstützt nur streng konformes JSON
Eine vollständige Liste der Unterschiede zwischen Newtonsoft.Json und System.Text.Json finden Sie in der Tabelle der Unterschiede bei der Migration von Newtonsoft.Json zu System.Text.Json.
Weitere Informationen zu JSON-Schemaspezifikationen finden Sie in der Dokumentation unter JSON-Schema.org.