sogis / json2qgs

Repo für json2qgs, jsons mit assets und serviceübergreifendes permission.json
0 stars 2 forks source link

Für alle optionalen Teile der Schema "null" erlauben #12

Closed ojeker closed 3 years ago

ojeker commented 3 years ago

Gründe:

mwa commented 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.

ojeker commented 3 years ago

@mwa Danke für den Hinweis zu json_strip_nulls(...). Wir sind am prüfen, ob dies gangbar ist.

ojeker commented 3 years ago

Verhalten von jsonb_strip_nulls(...):

Query:

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
;

Resultat

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]

Fragen

mwa commented 3 years ago
ojeker commented 3 years ago

Danke für diesen Vorschlag - wir fahren bis auf weiteres so. Falls nicht einfach lösbare Fragen auftauchen werde ich das Issue wiedereröffnen.