JSON (
- ISJSON:examina una cadena si es un JSON válido o no
- JSON_VALUE:recupera el valor de una cadena JSON
- JSON_QUERY:obtiene un objeto o una matriz de una cadena JSON
- JSON_MODIFY:devuelve la cadena JSON actualizada
- OPENJSON:analiza el texto JSON y devuelve objetos y propiedades de la entrada JSON como filas y columnas
- Cláusula FOR JSON:exporta datos SQL a formato JSON
Función ISJSON
DECLARE @json NVARCHAR(MAX); SET @json = N'{ "info":[ { "id":"1", "name":"Robert Aragon", "ssn":"489-36-8350", "credit_card":[ "4929-3813-3266-4295", "5370-4638-8881-3020" ], "address":{ "town":"Avon", "area":"New York", "zipcode":"76148" } }, { "id":"2", "name":"Thomas Conley", "ssn":"690-05-5315", "credit_card":[ "5299-1561-5689-1938" ], "address":{ "town":"Jackson Street", "area":"New York", "zipcode":"80233" } }, { "id":"3", "name":"Susan Davis", "ssn":"421-37-1396", "credit_card":[ "5293-8502-0071-3058" ], "address":{ "town":"Rock Beach", "area":"Los angeles", "zipcode":"900341" } }, { "id":"4", "name":"Christopher Diaz", "ssn":"458-02-6124", "credit_card":[ "5548-0246-6336-5664" ], "address":{ "town":"Small town", "area":"Wasshington", "zipcode":"63126" } }, { "id":"5", "name":"Rick Edwards", "ssn":"612-20-6832", "credit_card":[ "4539-5385-7425-5825" ], "address":{ "town":"Free Town", "area":"Utah", "zipcode":"97222" } }, { "id":"6", "name":"Victor Faulkner", "ssn":"300-62-3266", "credit_card":[ "4916-9766-5240-6147", "4532-4220-6922-9909", "5218-0144-2703-9266" ], "address":{ "town":"Dakota", "area":"North Dakota", "zipcode":"92104" } } ] } '; SELECT ISJSON(@json);
Salida
1 -- 1 if it is a valid JSON otherwise 0
Función JSON_VALUE
Esta función se usa para recuperar un valor escalar de una cadena JSON. Su sintaxis es
JSON_VALUE(expression, path)
expresión es el nombre de una variable o una columna que contiene texto JSON y es la propiedad a extraer. Por ejemplo, ejecutar la siguiente declaración en la cadena JSON anterior producirá el siguiente resultado:
SELECT JSON_VALUE(@json, '$.info[3].credit_card[0]')
Salida
5548-0246-6336-5664
La función JSON_VALUE devuelve un único valor de texto de tipo nvarchar(4000) . Devuelve null si la ruta especificada no se encuentra en el objeto JSON o el valor está más allá de nvarchar (4000). Usar ‘estricto La palabra clave antes de la ruta generará el error si la ruta especificada no está disponible en el objeto JSON.
Función JSON_QUERY
El La función JSON_QUERY(expresión [,ruta]) toma el nombre de una variable o una columna que contiene texto JSON y la ruta JSON que especifica el objeto o la matriz para extraer como sus argumentos.
Salida
Devuelve un fragmento JSON de tipo nvarchar(max) . Al igual que la función JSON_VALUE, devuelve un valor nulo si el valor especificado no es un objeto o una matriz. El uso de la palabra clave "estricta" arrojará el error.
Función JSON_MODIFY
Actualiza el valor de una propiedad en una cadena JSON y devuelve la cadena JSON actualizada. Toma expresión, camino y nuevo como argumentos. Usando esta función, podemos hacer la siguiente operación en una cadena JSON:
- Actualizar
- Insertar
- Eliminar
- Anexar
1. Actualizar
Actualiza el valor de una ruta dada.
SELECT JSON_MODIFY(@json,'$.info[0].name', 'Mehedi')
Salida
2. Insertar
Se agrega un nuevo valor en la cadena JSON si el atributo en la ruta proporcionada no existe. De lo contrario, actualizará el valor existente según el ejemplo anterior. El nuevo atributo se agrega al final del JSON.
SELECT JSON_MODIFY(@json,'$.info[0].last_name', 'Mehedi')
Salida
3. Eliminar
Poner el valor NULL en la ruta simplemente lo eliminará.
SELECT JSON_MODIFY(@json,'$.info[0].name', NULL)
Salida
4. Agregar
El nuevo elemento se puede agregar en una matriz como la siguiente:
SELECT JSON_MODIFY(@json,'append $.info[0].credit_card','4539-5385-7425-5825')
Salida
Función OPENJSON
Esta es una función con valores de tabla que analiza texto JSON y devuelve objetos y propiedades de la entrada JSON como filas y columnas.
DECLARE @json NVARCHAR(MAX); SET @json = N'{"id":"1", "name": "Robert Aragon", "ssn": "489-36-8350", "credit_card":["4929-3813-3266-4295","5370-4638-8881-3020"], "address": {"town": "Avon", "area": "New York", "zipcode": "76148"}}'; SELECT * FROM OpenJson(@json) with ( id int '$.id', name varchar(50) '$.name', ssn varchar(50) '$.ssn', [credit_card] nvarchar(MAX) AS JSON, [address] nvarchar(MAX) AS JSON )
Salida
Cláusula FOR JSON
Esta cláusula se usa ampliamente con TSQL para exportar datos de tablas SQL a formato JSON. Tiene dos variantes:
- AUTO:la salida JSON predeterminada se genera mediante la opción AUTO.
- PATH:la estructura de JSON se puede modificar mediante el nombre de la columna o los alias mediante la opción PATH
IF OBJECT_ID('Test1', 'U') IS NOT NULL DROP TABLE Test1; GO -- Create the table CREATE TABLE Test1( pk_id int not null identity(1,1), name varchar(10) default ('Mehedi') ) GO -- Populate with 3 sample data INSERT INTO Test1 default values GO 2 IF OBJECT_ID('Test2', 'U') IS NOT NULL DROP TABLE Test2; GO -- Create the table CREATE TABLE Test2( pk_id int not null identity(1,1), area varchar(10) default ('Dhanmondi'), city varchar(10) default ('Dhaka') ) GO -- Populate with 3 sample data INSERT INTO Test2 default values GO 1 -- Example of AUTO SELECT A.pk_id, A.name, (SELECT pk_id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON AUTO -- Example of PATH SELECT A.pk_id, A.name, (SELECT pk_id as id, area, city FROM Test2 B WHERE A.pk_id = B.pk_id FOR JSON AUTO ) as test2 FROM Test1 A FOR JSON PATH , ROOT ('EmployeeInfo') GO
Salida
Conclusión
Esto es todo sobre el JSON en SQL Server. ¡Feliz TSQLing!
Este artículo está tomado de mi blog.