Compartir a través de


Test-Json

Comprueba si una cadena es un documento JSON válido

Sintaxis

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

El Test-Json cmdlet comprueba si una cadena es un documento de notación de objetos JavaScript (JSON) válido y, opcionalmente, puede comprobar que el documento JSON se encuentra en un esquema proporcionado.

A continuación, la cadena comprobada se puede usar con el ConvertFrom-Json cmdlet convertir una cadena con formato JSON en un objeto JSON, que se administra fácilmente en PowerShell o se envía a otro programa o servicio web que accede a la entrada JSON.

Muchos sitios web usan JSON en lugar de XML para serializar los datos para la comunicación entre servidores y aplicaciones web.

Este cmdlet se introdujo en PowerShell 6.1.

Ejemplos

Ejemplo 1: Prueba si un objeto es json válido

En este ejemplo se comprueba si la cadena de entrada es un documento JSON válido.

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

True

Ejemplo 2: Prueba de un objeto con un esquema proporcionado

En este ejemplo se toma una cadena que contiene un esquema JSON y se compara con una cadena de entrada.

$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

En este ejemplo, se produce un error porque el esquema espera un entero por antigüedad , pero la entrada JSON que probamos usa un valor de cadena en su lugar.

Para obtener más información, consulte Esquema JSON.

Ejemplo 3: Probar un objeto en un esquema del archivo

El esquema JSON puede hacer referencia a definiciones mediante $ref la palabra clave . $ref puede resolverse en un URI que haga referencia a otro archivo. El parámetro SchemaFile acepta la ruta de acceso literal al archivo de esquema JSON y permite validar los archivos JSON con dichos esquemas.

En este ejemplo, el schema.json archivo hace referencia 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

Para obtener más información, consulte Estructuración de un esquema complejo.

Parámetros

-Json

Especifica la cadena JSON que se va a probar para la validez. Escriba una variable que contenga la cadena, o un comando o una expresión que obtengan la cadena. También puede canalizar una cadena a Test-Json.

Se requiere el parámetro Json .

Tipo:String
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-LiteralPath

Especifica una ruta de acceso a un archivo JSON. El valor de LiteralPath se usa exactamente como se escribe. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso contiene caracteres de escape, escríbalos entre comillas simples. Las comillas simples indican a PowerShell que no interprete ningún carácter como secuencias de escape.

Este parámetro se agregó en PowerShell 7.4.

Tipo:String
Alias:PSPath, LP
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:False

-Path

Especifica la ruta de acceso a un archivo JSON. Este cmdlet obtiene el elemento en la ubicación especificada. Se permiten caracteres comodín, pero el patrón debe resolverse en un solo archivo.

Este parámetro se agregó en PowerShell 7.4.

Tipo:String
Posición:0
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:True
Aceptar caracteres comodín:True

-Schema

Especifica un esquema con el que validar la entrada JSON. Si se pasa, Test-Json valida que la entrada JSON se ajusta a la especificación especificada por el parámetro Schema y devuelve $true solo si la entrada se ajusta al esquema proporcionado.

Para obtener más información, consulte Esquema JSON.

Tipo:String
Posición:1
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

-SchemaFile

Especifica un archivo de esquema que se usa para validar la entrada JSON. Cuando se usa, devuelve $true Test-Json solo si la entrada JSON se ajusta al esquema definido en el archivo especificado por el parámetro SchemaFile.

Para obtener más información, consulte Esquema JSON.

Tipo:String
Posición:1
Valor predeterminado:None
Requerido:True
Aceptar entrada de canalización:False
Aceptar caracteres comodín:False

Entradas

String

Puede canalizar una cadena JSON a este cmdlet.

Salidas

Boolean

Este cmdlet devuelve $true si el json es válido y, de lo contrario, $false.

Notas

Desde PowerShell 6, PowerShell usa los ensamblados Newtonsoft.Json para las funciones JSON. La implementación de Newtonsoft incluye varias extensiones para el estándar JSON, como la compatibilidad con comentarios y el uso de comillas simples. Para obtener una lista completa de las características, consulte la documentación de Newtonsoft en https://www.newtonsoft.com/json.

A partir de PowerShell 7.4, Test-Json usa System.Text.Json para el análisis de JSON y JsonSchema.NET para la validación del esquema. Con estos cambios, Test-Json:

  • Ya no admite esquemas draft 4
  • Solo admite JSON estrictamente conforme

Para obtener una lista completa de las diferencias entre Newtonsoft.Json y System.Text.Json, consulte la tabla de diferencias de Migración de Newtonsoft.Json a System.Text.Json.

Para obtener más información sobre las especificaciones de esquema JSON, consulte la documentación de JSON-Schema.org.