JSON_EXTRACT
Extrae un valor de un documento JSON según una ruta.
JSON_EXTRACT(json_doc, path[, ...])- [ ]parte opcional
- ...se puede repetir
- json_doc
- Documento JSON o cadena con JSONJSON
- path
- Ruta al valor: $ es todo el documento, $.key una clave, $[0] un elemento de un arrayVARCHAR
Valor devuelto
Valor JSON; NULL si la ruta no existe en el documento o si un argumento es NULL; con varias rutas, un array con los valores encontrados
Ejemplos
Elemento de un array anidado y clave inexistente
SELECT JSON_EXTRACT('{"a": {"b": [10, 20]}}', '$.a.b[1]') AS second_item,
JSON_EXTRACT('{"a": 1}', '$.x') AS missing_key;Código promocional en los metadatos de un evento
SELECT event_id,
JSON_EXTRACT(metadata, '$.promo_code') AS promo_json,
metadata->>'$.promo_code' AS promo
FROM events
WHERE JSON_EXTRACT(metadata, '$.promo_code') IS NOT NULL
LIMIT 5;null de JSON y NULL de SQL
SELECT event_id,
metadata,
JSON_EXTRACT(metadata, '$.error_msg') IS NULL AS is_sql_null,
metadata->>'$.error_msg' AS error_msg
FROM events
WHERE event_id IN (1, 2);Detalles
El resultado es un valor JSON: las cadenas conservan las comillas, "SUMMER20". La forma abreviada para una columna es column->'$.key', y column->>'$.key' además quita las comillas, como JSON_UNQUOTE. Estos operadores solo funcionan con una columna, no con un literal.
Una clave que no existe da NULL, pero una clave con el valor null da el null de JSON, que no es igual al NULL de SQL: IS NULL es falso para él, y ->> devuelve la cadena null. Una cadena con un JSON no válido provoca un error. En PostgreSQL, para esto se usan los operadores -> y ->> con el tipo jsonb, y la ruta se escribe de otra forma.