清除 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}"}
我想删除 uuid
和 status
部分,我尝试了一些子请求,但无济于事。
另外,我想删除反斜杠 \
,否则在我的 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
我有一个 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}"}
我想删除 uuid
和 status
部分,我尝试了一些子请求,但无济于事。
另外,我想删除反斜杠 \
,否则在我的 Javascript.
有人知道吗? 提前致谢。
您可以使用 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