JSON parsing
Bonsoir à tous,
Je m'aperçois que je ne parse pas toutes les données JSON d'une URL, en effet il y a au début les clés next et previous :
{ "id":1, "next":"https://...&page=2", "previous":null, "results":[{...}] }
Comment récupérer les données de la page 2 et ainsi de suite ?
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Quel est ton code actuellement de parsing ? Quel est ton modèle ?
Ce que je ferais, en pseudo code :
Tu fais de requêtes pour avoir la première page.
Pour la seconde page, tu fais la même avec le
nextURL
.Si tu as besoin de concaténer rapidement tes résultats :
ou manuellement :
Merci, mais il peut y avoir plusieurs pages, je connais pas le nombre de pages à l'avance.
Voici mon code actuellement :
modele :
}
fonction Parser, la solution serait peut être que ma fonction soit récursive mais avec completion je ne sais pas comment faire !
Merci.
Quand je vois la boucle for j, à bannir !
Je reviendrais dessus si personne ne l’a fait quand je serais rentré.
Mais explique-moi pourquoi tu fais ça ? Pourquoi tu as un array pour les names, un pour l’img, etc ?
Pour les afficher dans un TableView ou CollectionView de cette façon :
cell.labelName.text = name[indexPath.row]
etc...
merci.
C'est bien ce que je pensais, alors non.
Il te faut un seul array de Results (si les pages ne t'intéressent pas):
var results: [Results]
Ces valeurs n'ont de sens qu'ensemble, si tu mélanges qty[1] et name[0], ça n'a plus de sens, on est d'accord.
Puis, tu fais :
Pourquoi ?
Imagines que demain, tu veux faire un filtre, un sort différent, supprimer un élément, rajouter un élément, etc.
Tu vas modifier les 4? La synchro n'est pas forcément évidente à faire non plus.
Le cas le plus simple pour montrer la complexité, est le sort ou le filter. Essaye d'en faire un, tu vas voir.
Ah oui exact plus simple comme ça effectivement ! merci.
Et pour mon problème de parser les url qui sont dans "next" tu aurais une idée ?
comme je disais dans un précédent message, je pensais faire une fonctionne récursive ?
Je n'ai pas testé, mais en pseudo code, je pense que cela devrait fonctionner.
Merci Larme, cela fonctionne désormais j'ai bien toutes les données.
En revanche juste un petit problème : lorsque la premiere URL est parsée, la CollectionView se charge comme si tout est terminé et ensuite l'écran clignote le temps que les pages restantes chargent les données suivantes.
Comment améliorer ceci ?
Du côté de ma CollectionViewController, j'ai ceci :