Test-Json
Comprueba si una cadena es un documento JSON válido
Sintaxis
JsonString (Es el valor predeterminado).
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>]
Description
El cmdlet Test-Json comprueba si una cadena es un documento válido de notación de objetos JavaScript (JSON) y puede comprobar opcionalmente ese documento JSON en un esquema proporcionado.
A continuación, la cadena comprobada se puede usar con el cmdlet ConvertFrom-Json 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 datos para la comunicación entre servidores y aplicaciones basadas en 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 -ErrorAction SilentlyContinue
False
En este ejemplo, se usa el parámetro ErrorAction para suprimir el mensaje de error. Sin este parámetro, el comando también genera 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 palabra clave. El $ref puede resolverse en un URI que hace 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 archivo schema.json 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, vea 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 escriba un comando o expresión que obtenga la cadena. También puede canalizar una cadena a Test-Json.
Se requiere el parámetro json.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
JsonString
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
JsonStringWithSchemaString
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
JsonStringWithSchemaFile
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | True |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-LiteralPath
Especifica una ruta de acceso a un archivo JSON. El valor de LiteralPath se usa exactamente tal como está escrito. Ninguno de los caracteres se interpreta como caracteres comodín. Si la ruta de acceso incluye caracteres de escape, escríbala 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.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
| Alias: | PSPath, LP |
Conjuntos de parámetros
JsonLiteralPath
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | True |
| Valor de los argumentos restantes: | False |
JsonLiteralPathWithSchemaString
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | True |
| Valor de los argumentos restantes: | False |
JsonLiteralPathWithSchemaFile
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | True |
| Valor de los argumentos restantes: | False |
-Options
De forma predeterminada, Test-Json no admite JSON que contenga comentarios ni comas finales. Este parámetro permite especificar opciones para cambiar el comportamiento predeterminado. Las siguientes opciones están disponibles:
IgnoreCommentsAllowTrailingCommas
Este parámetro se agregó en PowerShell 7.5.0-preview.4.
Propiedades del parámetro
| Tipo: | String[] |
| Valor predeterminado: | None |
| Valores aceptados: | IgnoreComments, AllowTrailingCommas |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
(All)
| Posición: | Named |
| Mandatory: | False |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | 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.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | True |
| DontShow: | False |
Conjuntos de parámetros
JsonPath
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | True |
| Valor de los argumentos restantes: | False |
JsonPathWithSchemaString
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | True |
| Valor de los argumentos restantes: | False |
JsonPathWithSchemaFile
| Posición: | 0 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | True |
| Valor de los argumentos restantes: | False |
-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 de y devuelve $true solo si la entrada se ajusta al esquema proporcionado.
Para obtener más información, consulte esquema JSON.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
JsonStringWithSchemaString
| Posición: | 1 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
JsonLiteralPathWithSchemaString
| Posición: | 1 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
JsonPathWithSchemaString
| Posición: | 1 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
-SchemaFile
Especifica un archivo de esquema que se usa para validar la entrada JSON. Cuando se usa, el Test-Json devuelve $true 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.
Propiedades del parámetro
| Tipo: | String |
| Valor predeterminado: | None |
| Admite caracteres comodín: | False |
| DontShow: | False |
Conjuntos de parámetros
JsonStringWithSchemaFile
| Posición: | 1 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
JsonLiteralPathWithSchemaFile
| Posición: | 1 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
JsonPathWithSchemaFile
| Posición: | 1 |
| Mandatory: | True |
| Valor de la canalización: | False |
| Valor de la canalización por nombre de propiedad: | False |
| Valor de los argumentos restantes: | False |
CommonParameters
Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.
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 y la JsonSchema.NET json para la validación de esquemas.
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 en Migrar 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.