PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 12/10/2021 16:01:37

PaulineJ
Membre

Guillemets qui s'insèrent lors de la création d'un json

Bonjour,

Je cherche à créer une fonction qui me permettrait d'obtenir un recordset de json à partir d'une table insérée grâce à PostGIS.
J'arrive à obtenir le bon résultat si je fais une "simple" requête :

        SELECT row_to_json(fc)
FROM (
        SELECT
            'Feature' AS "type",
            ST_AsGeoJSON(geom,4326) :: json AS "geometry",
            (
				SELECT json_strip_nulls(row_to_json(t))
                FROM (
                	SELECT '20-07-2021' AS day, ndvi,sf,vigueur
				)t		
            ) AS properties
        FROM cartocep_tot84
) AS fc;

Résultat correct (exemple d'une ligne de résultat) :

{
    "type": "Feature",
    "geometry": {
        "type": "Point",
        "coordinates": [
            -0.628998380703444,
            44.8235552388883
        ]
    },
    "properties": {
        "day": "20-07-2021",
        "ndvi": 0.58,
        "sf": 0.28,
        "vigueur": 0.48
    }
}

Mais quand je veux insérer cette requête dans une procédure, je me retrouve avec plein de guillemets double qui s'insèrent à chaque élément :
Voici ma procédure :

CREATE OR REPLACE FUNCTION public.get_geojson(measurement_date text)
    RETURNS SETOF record 
    LANGUAGE 'sql'

    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$
        SELECT row_to_json(fc)
FROM (
        SELECT
            'Feature' AS "type",
            ST_AsGeoJSON(geom,4326) :: json AS "geometry",
            (
				SELECT json_strip_nulls(row_to_json(t))
                FROM (
                	SELECT measurement_date AS day, ndvi,sf,vigueur
				)t		
            ) AS properties
        FROM cartocep_tot84
) AS fc
$BODY$;

ALTER FUNCTION public.get_geojson(text)
    OWNER TO postgres;

Et le mauvais résultat (exemple d'une ligne de résultat) :

("{""type"":""Feature"",""geometry"":{""type"":""Point"",""coordinates"":[-0.628998380703444,44.8235552388883]},""properties"":{""day"":""20-07-2021"",""ndvi"":0.58,""sf"":0.28,""vigueur"":0.48}}")

Savez-vous d'où pourraient provenir ces doubles guillemets intempestifs ? Et comment je pourrais faire en sorte qu'ils n'apparaissent pas ?
Merci d'avance pour le temps que vous prendrez !

Pauline

Hors ligne

#2 12/10/2021 18:41:57

dverite
Membre

Re : Guillemets qui s'insèrent lors de la création d'un json

Ces guillemets font partie du format "RECORD" qui encapsule une ligne de résultat.

Déclarez plutôt la fonction en RETURNS SETOF json au lieu de RETURNS SETOF RECORD, ça devrait être plus conforme au résultat voulu.

Hors ligne

#3 12/10/2021 19:32:40

PaulineJ
Membre

Re : Guillemets qui s'insèrent lors de la création d'un json

Super merci pour la réponse, c'est bien ça !

Hors ligne

Pied de page des forums