Я пытаюсь разобрать строку JSON в таблицу с ее парами значений.
Вот строка JSON:
{
"route": {
"coding": [
{
"code": "56",
"display": "ORAL",
"userSelected": true
}
]
}
}
Моя цель - поместить ее в таблицувот так:
| parent | key | value | type |
-------------------------------
| null | route | {coding: [...]} | object |
| route | coding | [{"code": "56", ...}] | array |
| route | coding | {"code": "56", ...} | object |
| coding | code | 56 | integer |
| coding | display | ORAL | text |
| coding | userselected | true | boolean |
Я пытаюсь сделать рекурсивный вызов.Я могу проанализировать массив или объект, но я просто не могу понять, как вызывать тот или другой на основе типа.
Это мой текущий код:
WITH RECURSIVE temp (parent, key, value, type) AS (
SELECT parent, key, value, type
FROM t1
UNION ALL
SELECT parent, key, value, jsonb_typeof(value) AS type
FROM (
SELECT key AS parent, (jsonb_each(value)).*
FROM temp
WHERE temp.type = 'object') AS p1
), temp2 (parent, key, value, type) AS (
SELECT parent, key, value, type
FROM t1
UNION ALL
SELECT parent, key, jsonb_array_elements(value), 'object' AS type
FROM temp2
WHERE temp2.type = 'array'
)
SELECT parent, key, value, type FROM temp;
Любая помощь очень ценится.Спасибо.