Aplanar objeto JSON en MYSQL

Resuelto ganLover asked hace 11 meses • 2 respuestas

Tengo una tabla con 1 columna y filas como:

Row- {'category': ['mobiles'], 'specs': ['4g', '2gb ram']}
Row- {'category': ['computer'], 'specs': ['2gb ram']}

Quiero aplanar los datos en 2 columnas.

category, mobiles
specs, 4g
specs, 2gb ram
category, computer
specs, 2gb ram

Probé esto

SELECT `key`,`value`
FROM table_name
CROSS JOIN JSON_TABLE(
    column_name,
    '$.*' COLUMNS (
        `key` TEXT PATH '$',
        NESTED PATH '$[*]' COLUMNS (
            `value` VARCHAR(255) PATH '$'
        )
    )
) AS jt;

Pero la columna clave siempre es nula.

ganLover avatar Feb 16 '24 08:02 ganLover
Aceptado
SELECT jsonkeystable.keyname,
       jsonvaluestable.value
FROM test
CROSS JOIN JSON_TABLE(
  JSON_KEYS(test.jsondata),
  '$[*]' COLUMNS (
    keyid FOR ORDINALITY,
    keyname VARCHAR(64) PATH '$'
    )
  ) jsonkeystable
CROSS JOIN JSON_TABLE(
  JSON_EXTRACT(test.jsondata, CONCAT('$.', jsonkeystable.keyname)),
  '$[*]' COLUMNS (
    valueid FOR ORDINALITY,
    value VARCHAR(64) PATH '$'
    )
  ) jsonvaluestable
ORDER BY test.id, jsonkeystable.keyid, jsonvaluestable.valueid
Nombre clave valor
especificaciones 4g
especificaciones 2gb de ram
categoría móviles
especificaciones 2gb de ram
categoría computadora

Violín paso a paso con algunos comentarios.

PD. Ajuste el orden de las filas con la cláusula ORDER BY adecuada.

Akina avatar Feb 16 '2024 04:02 Akina