Condividi tramite


Test-Json

Verifica se una stringa è un documento JSON valido

Sintassi

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

Descrizione

Il Test-Json cmdlet 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 ConvertFrom-Json cmdlet converte una stringa in formato JSON in un oggetto JSON, che è facilmente gestita in PowerShell o inviata 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 applicazioni 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

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 questo esempio viene visualizzato 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 la $ref parola chiave . Può $ref 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 schema.json file 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 che contiene la stringa o digitare un comando o un'espressione che ottiene la stringa. È anche possibile inviare tramite pipe una stringa a Test-Json.

Il parametro Json è obbligatorio.

Tipo:String
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:False

-LiteralPath

Specifica un percorso di un file JSON. Il valore di LiteralPath viene usato esattamente come viene digitato. Nessun carattere viene interpretato come carattere jolly. Se il percorso include caratteri di escape, racchiuderlo 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.

Tipo:String
Alias:PSPath, LP
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly: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.

Tipo:String
Posizione:0
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:True
Accettare caratteri jolly:True

-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 fornito.

Per altre informazioni, vedere Schema JSON.

Tipo:String
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

-SchemaFile

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

Per altre informazioni, vedere Schema JSON.

Tipo:String
Posizione:1
Valore predefinito:None
Necessario:True
Accettare l'input della pipeline:False
Accettare caratteri jolly:False

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 la 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.