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.

  1. El modo de ruta de acceso opcional, con un valor de lax o strict.

  2. 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 de people.

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:

Consulte también

OPENJSON (Transact-SQL)
JSON_VALUE (Transact-SQL)
JSON_QUERY (Transact-SQL)