Partager via


Test-Json

Teste si une chaîne est un document JSON valide

Syntaxe

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

L’applet Test-Json de commande teste si une chaîne est un document JSON (JavaScript Object Notation) valide et peut éventuellement vérifier que le document JSON sur un schéma fourni.

La chaîne vérifiée peut ensuite être utilisée avec l’applet ConvertFrom-Json de commande pour convertir une chaîne au format JSON en objet JSON, qui est facilement gérée dans PowerShell ou envoyée à un autre programme ou service web qui accède à une entrée JSON.

De nombreux sites web utilisent JSON au lieu de XML pour sérialiser les données en vue de la communication entre les serveurs et les applications basées sur le web.

L’applet de commande a été introduite dans PowerShell 6.1

Exemples

Exemple 1 : Tester si un objet est valide JSON

Cet exemple teste si la chaîne d’entrée est un document JSON valide.

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

True

Exemple 2 : Tester un objet par rapport à un schéma fourni

Cet exemple utilise une chaîne contenant un schéma JSON et la compare à une chaîne d’entrée.

$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

Dans cet exemple, nous obtenons une erreur, car le schéma attend un entier pour l’âge , mais l’entrée JSON que nous avons testée utilise plutôt une valeur de chaîne.

Pour plus d’informations, consultez Schéma JSON.

Exemple 3 : Tester un objet par rapport à un schéma à partir d’un fichier

Le schéma JSON peut référencer des définitions à l’aide du $ref mot clé. Le $ref fichier peut être résolu en URI qui fait référence à un autre fichier. Le paramètre SchemaFile accepte le chemin littéral du fichier de schéma JSON et autorise la validation des fichiers JSON par rapport à ces schémas.

Dans cet exemple, les références definitions.jsonde schema.json fichier .

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

Pour plus d’informations, consultez Structurer un schéma complexe.

Paramètres

-Json

Spécifie la chaîne JSON à tester pour la validité. Entrez une variable contenant la chaîne, ou tapez une commande ou une expression qui obtient la chaîne. Vous pouvez également diriger une chaîne vers Test-Json.

Le paramètre Json est requis.

Type:String
Position:0
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-LiteralPath

Spécifie un chemin d’accès à un fichier JSON. La valeur de LiteralPath est utilisée exactement comme elle est typée. Aucun caractère n’est interprété en tant que caractère générique. Si le chemin d’accès inclut des caractères d’échappement, mettez-le entre des guillemets simples. Les guillemets simples indiquent à PowerShell de ne pas interpréter de caractères comme séquences d’échappement.

Ce paramètre a été ajouté dans PowerShell 7.4.

Type:String
Alias:PSPath, LP
Position:0
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:False

-Path

Spécifie le chemin d’accès à un fichier JSON. Cette applet de commande obtient l’élément à l’emplacement spécifié. Les caractères génériques sont autorisés, mais le modèle doit être résolu en un seul fichier.

Ce paramètre a été ajouté dans PowerShell 7.4.

Type:String
Position:0
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:True
Accepter les caractères génériques:True

-Schema

Spécifie un schéma pour valider l’entrée JSON par rapport à. Si elle est passée, Test-Json valide que l’entrée JSON est conforme à la spécification spécifiée par le paramètre schéma et retourne $true uniquement si l’entrée est conforme au schéma fourni.

Pour plus d’informations, consultez Schéma JSON.

Type:String
Position:1
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

-SchemaFile

Spécifie un fichier de schéma utilisé pour valider l’entrée JSON. En cas d’utilisation, la Test-Json valeur renvoie $true uniquement si l’entrée JSON est conforme au schéma défini dans le fichier spécifié par le paramètre SchemaFile .

Pour plus d’informations, consultez Schéma JSON.

Type:String
Position:1
Valeur par défaut:None
Obligatoire:True
Accepter l'entrée de pipeline:False
Accepter les caractères génériques:False

Entrées

String

Vous pouvez diriger une chaîne JSON vers cette applet de commande.

Sorties

Boolean

Cette applet de commande retourne $true si le json est valide et sinon $false.

Notes

Depuis PowerShell 6, PowerShell utilise les assemblys Newtonsoft.Json pour les fonctions JSON. L’implémentation de Newtonsoft comprend plusieurs extensions à la norme JSON, telles que la prise en charge des commentaires et l’utilisation de guillemets simples. Pour obtenir la liste complète des fonctionnalités, consultez la documentation Newtonsoft à l’adresse https://www.newtonsoft.com/json.

À compter de PowerShell 7.4, Test-Json utilise System.Text.Json pour l’analyse JSON et JsonSchema.NET pour la validation de schéma. Avec ces modifications, Test-Json:

  • Ne prend plus en charge les schémas Draft 4
  • Prend uniquement en charge json strictement conforme

Pour obtenir la liste complète des différences entre Newtonsoft.Json et System.Text.Json, consultez la table des différences dans Migrate de Newtonsoft.Json vers System.Text.Json.

Pour plus d’informations sur les spécifications de schéma JSON, consultez la documentation sur JSON-Schema.org.