Closed ojeker closed 3 years ago
Lösungsvorschlag auf SQL Seite beim Generieren der Configs:
In Postgres gibt es die Funktion json_strip_nulls()
, welche rekursiv alle Felder mit NULL Werten entfernt (s. https://www.postgresql.org/docs/10/functions-json.html).
Beispiel:
SELECT json_strip_nulls(json_agg(foo)) FROM
(SELECT * FROM qwc_geodb.edit_points LIMIT 5) AS foo;
Alternativ könnte das Aufräumen oder sonstiges Postprocessing auch in einer Postgres Stored Procedure implementiert werden.
@mwa Danke für den Hinweis zu json_strip_nulls(...). Wir sind am prüfen, ob dies gangbar ist.
WITH
test_data AS (
SELECT
jsonb_build_object('orphan_key', NULL) AS orphan_key_null,
jsonb_build_object(
'sibling_key1', NULL,
'sibling_key2', 'val'
) AS sibling_key_null,
jsonb_build_object('parent', jsonb_build_object('orphan_key', NULL)) AS child_orphan_key_null,
jsonb_build_array('fuu', NULL) AS array_cell_null,
jsonb_build_array(NULL, NULL) AS array_all_null,
jsonb_build_array(NULL) AS array_of_one_null
FROM
pg_catalog.generate_series(1,1)
),
stripped AS (
SELECT
jsonb_strip_nulls(orphan_key_null) AS orphan_key_null,
jsonb_strip_nulls(sibling_key_null) AS sibling_key_null,
jsonb_strip_nulls(child_orphan_key_null) AS child_orphan_key_null,
jsonb_strip_nulls(array_cell_null) AS array_cell_null,
jsonb_strip_nulls(array_all_null) AS array_all_null,
jsonb_strip_nulls(array_of_one_null) AS array_of_one_null
FROM
test_data
)
SELECT * FROM stripped
;
orphan_key_null | sibling_key_null | child_orphan_key_null | array_cell_null | array_all_null | array_of_one_null |
---|---|---|---|---|---|
{} | {"sibling_key2": "val"} | {"parent": {}} | ["fuu", null] | [null, null] | [null] |
null
Werten sollten vermieden werden. Falls alle Werte null
sind, sollte stattdessen ein leeres Array []
eingesetzt werden, oder die Property ganz weggelassen werden. Vermutlich ist dieser Fall eher unwahrscheinlich, da ein Array üblicherweise wohl aus den Zeilen einer Query entsteht, welche nicht-leere Werte zurückgibt.Danke für diesen Vorschlag - wir fahren bis auf weiteres so. Falls nicht einfach lösbare Fragen auftauchen werde ich das Issue wiedereröffnen.
Gründe: