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

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 in base 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 su 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
     |                                      ~~~~~~~~~~~~~~~~~~~~~~~~~
     | IntegerExpected: #/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 in base 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 per verificare 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.

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

-Schema

Specifica uno schema per convalidare l'input JSON. Se passato, Test-Json verifica 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.

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

-SchemaFile

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

Per altre informazioni, vedere Schema JSON.

Type:String
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters: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

Il Test-Json cmdlet viene implementato usando la classe NJsonSchema.

A partire da PowerShell 6, PowerShell usa gli assembly Newtonsoft.Json per tutte 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.