Page 1 sur 1

Parsing Json lorsqu'il n'y a pas de nom de tableau...

Posté : lun. 18 mars 2019, 08:33:57
par bme
Bonjour à tous,
Pour résumer: nous disposons dans mon entreprise de la version V7.3 TR4. Avec les nouveaux opérateurs SQL/JSON, c'est assez facile de parser un Json contenant des tableaux. Par exemple, avec le Json suivant:

{"data":[{"id":"_1001"},{"id":"_1002"},{"id":"_1003"},{"id":"_1004"}]}

On peut utiliser :
SELECT Y.* FROM JSON_TABLE(
'{"data":[{"id":"_1001"},{"id":"_1002"},{"id":"_1003"},{"id":"_1004"}]}'
,'lax $' COLUMNS(
NESTED PATH 'lax $.data[*]' COLUMNS (ID VARCHAR(50) PATH '$.id' ))) as y;

Et on obtient :
_1001
_1002
_1003
...

Mon problème est que le JSON que je dois consommer en input n'a pas de nom de tableau:
{[
{"id":"_1001"},
{"id":"_1002"},
{"id":"_1003"},
{"id":"_1004"}
]}

Et je n'ai pas encore trouvé la bonne syntaxe pour parser ce type de Json…
La solution que j'utilise actuellement consiste à ajouter un nom de tableau à l'aide d'un concat:

SELECT Y.* FROM JSON_TABLE(
'{"data":'
concat Substr('{[{"id":"_1001"},{"id":"_1002"},{"id":"_1003"},{"id":"_1004"}]}', 2)
,'$.data[*]' Columns(Number VarChar(10) path '$.id')) AS Y;

Mais j'aimerais savoir si l'un d'entre vous a une meilleure solution?