Compartir a través de


Uso de OPENJSON con un esquema explícito

Aplica a: SQL Server 2016 (13.x) y versiones posteriores Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (solo servidor SQL pool)endpoint SQL Analytics en Microsoft FabricWarehouse en Microsoft FabricDatabase SQL en Microsoft Fabric

Use OPENJSON con un esquema explícito para devolver una tabla con formato tal como se especifica en la WITH cláusula .

Estos son algunos ejemplos que usan OPENJSON con un esquema explícito. Para obtener más información, vea OPENJSON (Transact-SQL).

Ejemplo - Uso de la cláusula WITH para dar formato a la salida

La siguiente consulta devuelve los resultados mostrados en la tabla siguiente. Observe cómo la AS JSON cláusula hace que los valores se devuelvan como objetos JSON en lugar de valores escalares en col5 y array_element.

DECLARE @json NVARCHAR(MAX) =
N'{"someObject":   
    {"someArray":  
      [  
          {"k1": 11, "k2": null, "k3": "text"},  
          {"k1": 21, "k2": "text2", "k4": { "data": "text4" }},  
          {"k1": 31, "k2": 32},  
          {"k1": 41, "k2": null, "k4": { "data": false }}     
       ]  
    }  
 }'  

SELECT * FROM  
 OPENJSON(@json, N'lax $.someObject.someArray')  
WITH ( k1 int,   
        k2 varchar(100),  
        col3 varchar(6) N'$.k3',  
        col4 varchar(10) N'lax $.k4.data',  
        col5 nvarchar(MAX) N'lax $.k4' AS JSON, 
        array_element nvarchar(MAX) N'$' AS JSON  
 )  

Results

k1 k2 col3 col4 col5 array_element
11 NULL "text" NULL NULL {"k1": 11, "k2": nulo, "k3": "texto"}
21 "text2" NULL "text4" { "data": "text4" } {"K1": Cierto, "K2": "Texto2", "K4": { "Datos": "Texto4" } }
31 "32" NULL NULL NULL {"K1": 31, "K2": 32 }
41 NULL NULL false { "data": false } {"k1": 41, "k2": null, "k4": { "data": false } }

Ejemplo: Carga de JSON en una tabla de SQL Server.

En el ejemplo siguiente se carga un objeto JSON completo en una tabla de SQL Server .

DECLARE @json NVARCHAR(MAX) = '{  
  "id" : 2,  
  "firstName": "John",  
  "lastName": "Smith",  
  "isAlive": true,  
  "age": 25,  
  "dateOfBirth": "2015-03-25T12:00:00",  
  "spouse": null  
  }';  

  INSERT INTO Person  
  SELECT *   
  FROM OPENJSON(@json)  
  WITH (id int,  
        firstName nvarchar(50), lastName nvarchar(50),   
        isAlive bit, age int,  
        dateOfBirth datetime2, spouse nvarchar(50))  

Más información sobre JSON en el motor de base de datos de SQL

Para obtener una introducción visual a la compatibilidad integrada con JSON, consulte los vídeos siguientes: