Expresiones de ruta de acceso JSON (SQL Server)
Se aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics (solo grupo de SQL sin servidor)
Use expresiones de rutas de acceso JSON para hacer referencia a las propiedades de los objetos JSON.
Al llamar a las siguientes funciones, hay que proporcionar una expresión de ruta de acceso.
Cuando se llama a OPENJSON para crear una vista relacional de los datos JSON. Para obtener más información, consulte OPENJSON (Transact-SQL).
Cuando se llama a JSON_VALUE para extraer un valor de texto JSON. Para obtener más información, consulte JSON_VALUE (Transact-SQL).
Cuando se llama a JSON_QUERY para extraer un objeto JSON o una matriz. Para obtener más información, vea JSON_QUERY (Transact-SQL).
Cuando se llama a JSON_MODIFY para actualizar el valor de una propiedad en una cadena JSON. Para obtener más información, vea JSON_MODIFY (Transact-SQL).
Partes de una expresión de ruta de acceso
Una expresión de ruta de acceso tiene dos componentes.
El modo de ruta de acceso opcional, con un valor de lax o strict.
La ruta de acceso en sí.
modo de ruta de acceso
Al principio de la expresión de ruta de acceso, puede optar por declarar el modo de la ruta de acceso con las palabras clave lax o strict. El valor predeterminado es lax.
En el modo lax, las funciones devuelven valores vacíos si la expresión de ruta de acceso contiene un error. Por ejemplo, si se solicita el valor $.name y el texto JSON no contiene una clave name, la función devuelve NULL, pero no genera ningún error.
En el modo strict, las funciones generan un error si la expresión de ruta de acceso contiene un error.
La consulta siguiente especifica explícitamente el modo lax
en la expresión de ruta de acceso.
DECLARE @json NVARCHAR(MAX);
SET @json=N'{ ... }';
SELECT * FROM OPENJSON(@json, N'lax $.info');
Path
Después de declarar (opcionalmente) el modo de ruta de acceso, se especifica la ruta de acceso.
El signo de dólar (
$
) representa el elemento de contexto.La ruta de acceso de propiedad es un conjunto de pasos de ruta de acceso. Los pasos de ruta de acceso pueden contener los siguientes elementos y operadores.
Nombres de clave. Por ejemplo,
$.name
y$."first name"
. Si el nombre de clave comienza por un signo de dólar o contiene caracteres especiales, como espacios u operadores de punto (.
), insértelo entre comillas.Elementos de matriz. Por ejemplo,
$.product[3]
. Las matrices tienen una base cero.El operador de punto (
.
) indica un miembro de un objeto. Por ejemplo, en$.people[1].surname
,surname
es un elemento secundario depeople
.
Ejemplos
Los ejemplos de esta sección hacen referencia al siguiente texto JSON.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
En la siguiente tabla se muestran algunos ejemplos de expresiones de ruta de acceso.
Expresión de ruta de acceso | Valor |
---|---|
$.people[0].name | John |
$.people[1] | { "name": "Jane", "surname": null, "active": true } |
$.people[1].surname | nulo |
$ | { "people": [ { "name": "John", "surname": "Doe" }, { "name": "Jane", "surname": null, "active": true } ] } |
Control de las rutas de acceso duplicadas por las funciones integradas
Si el texto JSON contiene propiedades duplicadas (por ejemplo, dos claves con el mismo nombre en el mismo nivel), las funciones JSON_VALUE y JSON_QUERY devuelven solo el primer valor que coincida con la ruta de acceso. Para analizar un objeto JSON que contiene claves duplicadas y devuelve todos los valores, use OPENJSON, como se muestra en el siguiente ejemplo.
DECLARE @json NVARCHAR(MAX);
SET @json=N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON(@json,'$.person.info');
Más información sobre JSON en SQL Server y Azure SQL Database
Vídeos de Microsoft
Nota:
Es posible que algunos de los vínculos de vídeo de esta sección no funcionen en este momento. Microsoft está migrando contenido que anteriormente estaba en Channel 9 a una nueva plataforma. Actualizaremos los vínculos a medida que los vídeos se migren a la nueva plataforma.
Para obtener una introducción visual a la compatibilidad integrada de JSON en SQL Server y Azure SQL Database, vea los siguientes vídeos:
- JSON as a bridge between NoSQL and relational worlds (JSON como puente entre los universos NoSQL y relacional)
Consulte también
OPENJSON (Transact-SQL)
JSON_VALUE (Transact-SQL)
JSON_QUERY (Transact-SQL)