Delen via


Test-Json

Test of een tekenreeks een geldig JSON-document is

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

Description

Met de Test-Json cmdlet wordt getest of een tekenreeks een geldig JSON-document (JavaScript Object Notation) is en optioneel kan worden gecontroleerd of het JSON-document in een opgegeven schema is.

De geverifieerde tekenreeks kan vervolgens worden gebruikt met de ConvertFrom-Json cmdlet om een tekenreeks met JSON-indeling te converteren naar een JSON-object, dat eenvoudig wordt beheerd in PowerShell of wordt verzonden naar een ander programma of een andere webservice die toegang heeft tot JSON-invoer.

Veel websites gebruiken JSON in plaats van XML om gegevens te serialiseren voor communicatie tussen servers en web-apps.

Deze cmdlet is geïntroduceerd in PowerShell 6.1

Voorbeelden

Voorbeeld 1: Testen of een object geldige JSON is

In dit voorbeeld wordt getest of de invoertekenreeks een geldig JSON-document is.

'{"name": "Ashley", "age": 25}' | Test-Json

True

Voorbeeld 2: Een object testen op basis van een opgegeven schema

In dit voorbeeld wordt een tekenreeks met een JSON-schema gebruikt en vergeleken met een invoertekenreeks.

$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 dit voorbeeld krijgen we een fout omdat in het schema een geheel getal wordt verwacht voor leeftijd , maar de JSON-invoer die we hebben getest, gebruikt in plaats daarvan een tekenreekswaarde.

Zie JSON-schema voor meer informatie.

Voorbeeld 3: Een object testen op basis van een schema uit een bestand

JSON-schema kan verwijzen naar definities met trefwoorden $ref . De $ref fout kan worden omgezet in een URI die verwijst naar een ander bestand. De parameter SchemaFile accepteert het letterlijke pad naar het JSON-schemabestand en staat toe dat JSON-bestanden worden gevalideerd op basis van dergelijke schema's.

In dit voorbeeld verwijst het schema.json bestand naar 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

Zie Een complex schema structureren voor meer informatie.

Parameters

-Json

Hiermee geeft u de JSON-tekenreeks op die moet worden getest op geldigheid. Voer een variabele in die de tekenreeks bevat of typ een opdracht of expressie die de tekenreeks ophaalt. U kunt ook een tekenreeks doorsluisen naar Test-Json.

De Json-parameter is vereist.

Type:String
Position:1
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-LiteralPath

Hiermee geeft u een pad naar een JSON-bestand. De waarde van LiteralPath wordt exact gebruikt zoals deze is getypt. Er worden geen tekens geïnterpreteerd als jokertekens. Als het pad escapetekens bevat, plaatst u het tussen enkele aanhalingstekens. Enkele aanhalingstekens geven PowerShell aan dat er geen tekens als escapereeksen moeten worden geïnterpreteerd.

Deze parameter is toegevoegd in PowerShell 7.4.

Type:String
Aliases:PSPath, LP
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:False

-Path

Hiermee geeft u het pad naar een JSON-bestand. Met deze cmdlet wordt het item op de opgegeven locatie opgeslagen. Jokertekens zijn toegestaan, maar het patroon moet worden omgezet in één bestand.

Deze parameter is toegevoegd in PowerShell 7.4.

Type:String
Position:Named
Default value:None
Required:True
Accept pipeline input:False
Accept wildcard characters:True

-Schema

Hiermee geeft u een schema op waarmee de JSON-invoer moet worden gevalideerd. Als dit wordt doorgegeven, Test-Json controleert u of de JSON-invoer voldoet aan de specificatie die is opgegeven door de parameter Schema en retourneert $true u alleen als de invoer voldoet aan het opgegeven schema.

Zie JSON-schema voor meer informatie.

Type:String
Position:2
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-SchemaFile

Hiermee geeft u een schemabestand op dat wordt gebruikt om de JSON-invoer te valideren. Wanneer deze wordt gebruikt, wordt alleen Test-Json geretourneerd $true als de JSON-invoer voldoet aan het schema dat is gedefinieerd in het bestand dat is opgegeven door de parameter SchemaFile .

Zie JSON-schema voor meer informatie.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Invoerwaarden

String

U kunt een JSON-tekenreeks naar deze cmdlet doorsluisen.

Uitvoerwaarden

Boolean

Deze cmdlet retourneert $true als de JSON geldig is en anders $false.

Notities

Sinds PowerShell 6 gebruikt PowerShell de Newtonsoft.Json-assembly's voor JSON-functies. De implementatie van Newtonsoft bevat verschillende extensies voor de JSON-standaard, zoals ondersteuning voor opmerkingen en het gebruik van enkele aanhalingstekens. Zie de Newtonsoft-documentatie op https://www.newtonsoft.com/jsonvoor een volledige lijst met functies.

Vanaf PowerShell 7.4 gebruikt Test-Jsonu System.Text.Json voor JSON-parsering en JsonSchema.NET voor schemavalidatie. Met deze wijzigingen: Test-Json

  • Biedt geen ondersteuning meer voor Concept 4-schema's
  • Ondersteunt alleen strikt conforme JSON

Zie de tabel met verschillen in Migrate van Newtonsoft.Json naar System.Text.Json voor een volledige lijst met verschillen tussen Newtonsoft.Json en System.Text.Json.

Zie de documentatie op JSON-Schema.org voor meer informatie over JSON-schemaspecificaties.