Condividi tramite


Test-Json

Verifica se una stringa è un documento JSON valido

Sintassi

JsonString (impostazione predefinita).

Test-Json
    [-Json] <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonStringWithSchemaString

Test-Json
    [-Json] <String>
    [-Schema] <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonStringWithSchemaFile

Test-Json
    [-Json] <String>
    -SchemaFile <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonPath

Test-Json
    -Path <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonPathWithSchemaString

Test-Json
    [-Schema] <String>
    -Path <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonPathWithSchemaFile

Test-Json
    -Path <String>
    -SchemaFile <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonLiteralPath

Test-Json
    -LiteralPath <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonLiteralPathWithSchemaString

Test-Json
    [-Schema] <String>
    -LiteralPath <String>
    [-Options <String[]>]
    [<CommonParameters>]

JsonLiteralPathWithSchemaFile

Test-Json
    -LiteralPath <String>
    -SchemaFile <String>
    [-Options <String[]>]
    [<CommonParameters>]

Descrizione

Il cmdlet Test-Json verifica se una stringa è un documento JSON (JavaScript Object Notation) valido e può facoltativamente verificare che il documento JSON sia rispetto a uno schema specificato.

La stringa verificata può quindi essere usata con il cmdlet ConvertFrom-Json convertire una stringa in formato JSON in un oggetto JSON, che è facilmente gestito in PowerShell o inviato a un altro programma o servizio Web che accede all'input JSON.

Molti siti Web usano JSON anziché XML per serializzare i dati per la comunicazione tra server e app basate sul Web.

Questo cmdlet è stato introdotto in PowerShell 6.1

Esempio

Esempio 1: Verificare se un oggetto è JSON valido

In questo esempio viene verificato se la stringa di input è un documento JSON valido.

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

Esempio 2: Testare un oggetto in base a uno schema fornito

Questo esempio accetta una stringa contenente uno schema JSON e la confronta con una stringa di input.

$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 -ErrorAction SilentlyContinue
False

In questo esempio viene usato il parametro ErrorAction per eliminare il messaggio di errore. Senza questo parametro, il comando restituisce anche un errore perché lo schema prevede un numero intero per età , ma l'input JSON testato usa invece un valore stringa.

Per altre informazioni, vedere schema JSON.

Esempio 3: Testare un oggetto su uno schema da un file

Lo schema JSON può fare riferimento alle definizioni usando $ref parola chiave. Il $ref può essere risolto in un URI che fa riferimento a un altro file. Il parametro SchemaFile accetta il percorso letterale del file di schema JSON e consente la convalida dei file JSON rispetto a tali schemi.

In questo esempio il file di schema.json fa riferimento a 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

Per altre informazioni, vedere strutturazione di uno schema complesso.

Parametri

-Json

Specifica la stringa JSON da testare per la validità. Immettere una variabile contenente la stringa oppure digitare un comando o un'espressione che ottiene la stringa. È anche possibile inviare tramite pipe una stringa a Test-Json.

È necessario il parametro Json.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

JsonString
Posizione:0
Obbligatorio:True
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
JsonStringWithSchemaString
Posizione:0
Obbligatorio:True
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
JsonStringWithSchemaFile
Posizione:0
Obbligatorio:True
Valore dalla pipeline:True
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-LiteralPath

Specifica un percorso di un file JSON. Il valore di LiteralPath viene usato esattamente come viene digitato. Nessun carattere viene interpretato come metacaratteri. Se il percorso include caratteri di escape, racchiudilo tra virgolette singole. Le virgolette singole indicano a PowerShell di non interpretare alcun carattere come sequenze di escape.

Questo parametro è stato aggiunto in PowerShell 7.4.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False
Alias:PSPath, UP

Set di parametri

JsonLiteralPath
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False
JsonLiteralPathWithSchemaString
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False
JsonLiteralPathWithSchemaFile
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False

-Options

Per impostazione predefinita, Test-Json non supporta JSON contenente commenti o virgole finali. Questo parametro consente di specificare le opzioni per modificare il comportamento predefinito. Sono disponibili le opzioni seguenti:

  • IgnoreComments
  • AllowTrailingCommas

Questo parametro è stato aggiunto in PowerShell 7.5.0-preview.4.

Proprietà dei parametri

Tipo:

String[]

Valore predefinito:None
Valori accettati:IgnoreComments, AllowTrailingCommas
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

(All)
Posizione:Named
Obbligatorio:False
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-Path

Specifica il percorso di un file JSON. Questo cmdlet ottiene l'elemento nella posizione specificata. I caratteri jolly sono consentiti, ma il criterio deve essere risolto in un singolo file.

Questo parametro è stato aggiunto in PowerShell 7.4.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:True
DontShow:False

Set di parametri

JsonPath
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False
JsonPathWithSchemaString
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False
JsonPathWithSchemaFile
Posizione:0
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:True
Valore dagli argomenti rimanenti:False

-Schema

Specifica uno schema per convalidare l'input JSON. Se passato, Test-Json convalida che l'input JSON sia conforme alla specifica specificata dal parametro schema e restituisca $true solo se l'input è conforme allo schema specificato.

Per altre informazioni, vedere schema JSON.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

JsonStringWithSchemaString
Posizione:1
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
JsonLiteralPathWithSchemaString
Posizione:1
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
JsonPathWithSchemaString
Posizione:1
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

-SchemaFile

Specifica un file di schema usato per convalidare l'input JSON. Se usato, il Test-Json restituisce $true solo se l'input JSON è conforme allo schema definito nel file specificato dal parametro SchemaFile.

Per altre informazioni, vedere schema JSON.

Proprietà dei parametri

Tipo:String
Valore predefinito:None
Supporta i caratteri jolly:False
DontShow:False

Set di parametri

JsonStringWithSchemaFile
Posizione:1
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
JsonLiteralPathWithSchemaFile
Posizione:1
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False
JsonPathWithSchemaFile
Posizione:1
Obbligatorio:True
Valore dalla pipeline:False
Valore dalla pipeline in base al nome della proprietà:False
Valore dagli argomenti rimanenti:False

CommonParameters

Questo cmdlet supporta i parametri comuni: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction e -WarningVariable. Per altre informazioni, vedi about_CommonParameters.

Input

String

È possibile inviare tramite pipe una stringa JSON a questo cmdlet.

Output

Boolean

Questo cmdlet restituisce $true se il codice JSON è valido e in caso contrario $false.

Note

A partire da PowerShell 6, PowerShell usa gli assembly Newtonsoft.Json per le funzioni JSON. L'implementazione di Newtonsoft include diverse estensioni allo standard JSON, ad esempio il supporto per i commenti e l'uso di virgolette singole. Per un elenco completo delle funzionalità, vedere la documentazione di Newtonsoft all'indirizzo https://www.newtonsoft.com/json.

A partire da PowerShell 7.4, Test-Json usa System.Text.Json per l'analisi JSON e JsonSchema.NET per la convalida dello schema. Con queste modifiche, Test-Json:

  • Non supporta più schemi bozza 4
  • Supporta solo JSON strettamente conforme

Per un elenco completo delle differenze tra Newtonsoft.Json e System.Text.Json, vedere Tabella delle differenze in Eseguire la migrazione da Newtonsoft.Json a System.Text.Json.

Per altre informazioni sulle specifiche dello schema JSON, vedere la documentazione in JSON-Schema.org.