清除 PostGreSQL 请求中的 JSON

Clean a JSON in a PostGreSQL request

我有一个 SQL 几乎完美的请求(对于我想做的):

WITH liste_fichiers_joints AS (
    SELECT
        id_dans_table,
        ARRAY_AGG (row_to_json(f)) ids_fichier
    FROM
        fichiers_joints fj
    LEFT JOIN fichiers f ON f.id = fj.id_fichier
    WHERE
        nom_table = 'taches'
    GROUP BY
        id_dans_table
    )
SELECT t.id, t.nom, lfj.ids_fichier
FROM taches t
JOIN liste_fichiers_joints lfj ON lfj.id_dans_table = t.id

正如您可能已经猜到的那样,我想在同一个请求中获取所有任务:任务的 ID、任务的名称以及附加的所有 ID 和名称的数组文件,如果有的话。

结果几乎是我想要的,但最后一列显示:

{"{\"uuid\":\"fd809b1f-6849-4322-a654-67f70c46a435\",\"nom\":\"test.png\",\"date\":\"2020-11-17T01:21:24.223354\",\"status\":\"TMP\",\"id\":185}"}

我想删除 uuidstatus 部分,我尝试了一些子请求,但无济于事。 另外,我想删除反斜杠 \,否则在我的 Javascript.

中将此列用作 JSON 会很复杂

有人知道吗? 提前致谢。

您可以使用 json[b]_build_object() 而不是 row_to_json[b]():它接受 key/value 对的列表,因此您可以精细控制对象中的内容。

此外,您很可能需要一个 JSON 数组,而不是 JSON 个对象的 Postgres 数组。

我建议更改此设置:

ARRAY_AGG (row_to_json(f)) ids_fichier

收件人:

jsonb_agg(
    jsonb_build_object('nom', f.nom, 'date', f.date, 'id', f.id)
) as ids_fichier