[Résolu] Question JSON

Salut,

je cherche à mettre en forme un fichier JSON via un squelette mais ça galère un peu :sweat_smile:.
Voir le code complet en bas.

1er point - appliquer des filtres aux balises

Pour fournir des URLs absolues, j’essaie d’utiliser |url_absolue, par ex avec url,#URL_ARTICLE|url_absolue, mais ça ne fonctionne pas, peu importe la syntaxe (j’ai tenté d’échapper les crochets, de mettre entre guillemets, réciter un chant vaudou…)

2nd point : les boucles imbriquées

Dans une boucle ARTICLES, je veux récupérer les événements liés à l’article (dates début/fin, lieu…) mais pareil, je ne trouve pas bonne syntaxe pour avoir un truc du genre :

  • titre article
  • texte article
  • événements
    – date événement 1
    – date événement 2

Il faut faire un second tableau ? Mais comment l’afficher ensuite ?

Bref, ça galère !

[(#HTTP_HEADER{Content-Type: application/json[; charset=(#CHARSET)]})]
[(#SET{evenements,#ARRAY})][
(#SET{date,#DATE})]
<BOUCLE_articles(ARTICLES) 
    {id_secteur=2}
    {evenements.statut=publie}
    {par evenements.date_debut}
    {evenements.date_fin > #GET{date}}
    {#ENV{offset,0},#ENV{limit,50}}>
        [(#SET{evenements,#GET{evenements}|push{#ARRAY{
            id,#ID_ARTICLE,
            title,#TITRE,
            subTitle,#SOUSTITRE,
            chapo,#CHAPO,
            texte,#TEXTE,
            style,#STYLE,
            publishedAt,#DATE,
            updatedAt,#DATE_MODIF,
            infosEvenent,#TARIFS,
            ticketingUrl,#LIEN_BILLETTERIE,
            facebookEvent,#EVENEMENTFB,
            infoBanner,#BANDEAU_INFO,
            pordExter,#PROD_EXTER,
            url,#URL_ARTICLE,
            logo,#LOGO_ARTICLE,
        }}})]
</BOUCLE_articles>
{
    "items": [(#GET{evenements}|json_encode)]
}

Bonjour Jean-Marie,

Un code comme ça :

[(#HTTP_HEADER{Content-Type: application/json[; charset=(#CHARSET)]})]
[(#SET{items,#ARRAY})]
[(#SET{date,#EVAL{date('Y-m-d H:i:s')}})]
<BOUCLE_articles(ARTICLES){id_secteur=2}{#ENV{offset,0},#ENV{limit,50}}>

    [(#SET{evts,#ARRAY})]
    <BOUCLE_evts(EVENEMENTS){id_article}{statut=publie}{date_fin > #GET{date}}{par date_debut}>
        [(#SET{evts,#GET{evts}|push{#ARRAY{
            dateDebut,#DATE_DEBUT,
            dateFin,#DATE_FIN,
            lieu,#LIEU
        }}})]
    </BOUCLE_evts>

    [(#GET{evts}|count|>{0}|oui)
        #SET{items,#GET{items}|push{#ARRAY{
            id,#ID_ARTICLE,
            title,#TITRE,
            subTitle,#SOUSTITRE,
            chapo,#CHAPO,
            texte,#TEXTE,
            style,#STYLE,
            publishedAt,#DATE,
            updatedAt,#DATE_MODIF,
            infosEvenement,#TARIFS,
            ticketingUrl,#LIEN_BILLETTERIE,
            facebookEvent,#EVENEMENTFB,
            infoBanner,#BANDEAU_INFO,
            prodExter,#PROD_EXTER,
            url,[(#URL_ARTICLE|url_absolue)],
            logo,[(#LOGO_ARTICLE|extraire_attribut{src}|url_absolue)],
            evenements,#GET{evts}
        }}}
    ]
</BOUCLE_articles>
{
    "items": [(#GET{items}|json_encode)]
}

Il y a des exemples dans json · master · spip-galaxie / univers_spip · GitLab aussi

Merci pour vos retours.

C’est bon pour la syntaxe des boucles imbriquées ça fonctionne.

Par contre, les filtres ne fonctionnent pas (j’avais déjà testé cette syntaxe), ça m’affiche le nom d’un des précédents champs, je ne comprends pas bien pourquoi.

Si j’utilise "[(#FICHIER|url_absolue)]" ou '[(#FICHIER|url_absolue)]', j’ai "%##1@" en sortie…

Même résultat avec les autres filtres |abs_url - SPIP ou |liens_absolus - SPIP ?

Essaye une petite contorsion avec dans la boucle articles

[(#SET{absolue_url,[(#URL_ARTICLE|url_absolue)]})]

puis dans le tableau

url,[(#GET{absolue_url})],

Oui, j’ai testé ça aussi, ça renvoie la même chose.

Ah, bonne idée, mais ne fonctionne pas non plus. Là, ça me renvoie le nom du champ…

Et cette forme-ci : [(#URL_ARTICLE|url_absolue|json_encode)]

Ah mais en fait non, ça fonctionne, je ne sais pas ce que j’ai foutu tout à l’heure !
Merci :slight_smile:

Par contre, je ne comprends pas pourquoi ça ne fonctionne pas sans ça. Dans les exemples de @JamesRezo, il y a des filtres sur les valeurs : json/stats-v.html · master · spip-galaxie / univers_spip · GitLab

Peut-être à cause du fait que je passe par un tableau et |json_encode ?

oui, c’est possible. |json_encode{....} avec les bonnes valeurs peut-être ? c’est une fonction php native : PHP: json_encode - Manual