SwiftUI : recupere un json depuis le web + parser

Bonjour,

Je souhaite creer un liste avec des infos que j’aurais récupéré depuis json sur un site.
j’aimerai faire cela avec SwiftUI.

Dans les cours de Maxime, les données sont déjà stockés dans fichier sous forme de tableau mais il n’y a rien sur le faite de recuperer depuis un site web en json et ensuite exploiter les données sius forme de liste. C’est généralement ce cas de figure que l’on rencontre.

Merci de votre aide.

Hello @djibs,

La récupération de donnée JSON depuis un site internet n’est pas lié à SwiftUI.
Je pense que Maxime en parle dans un de ces cours, sur la partie avec Alamofire (si pas, regarde le repo GitHub d’Alamofire, c’est expliqué assez clairement à mes souvenirs).

Si tu as d’autres soucis/questions, n’hésites pas!

Bonne journée,

Alexandre

Merci pour ta réponse.

Je souhaite faire mon projet qu’en utilisant swiftUI

J’ai trouvé une solution en swift sans dépendre d’Alamofire que j’ai adapté pour l’api de wordpress. La voici pour ceux qui en auraient besoin :

import UIKit

struct Post: Codable {
    let id: Int
    let type: String
    let thumbnail: String

    let link: String     

    //Title is of type struct Title
    let title: Title
}

//Structure to map Title
struct Title: Codable {
    let rendered: String
}

let url = URL(string: "https://XXX.fr/wp-json/wp/v2/posts")!
  
let task = URLSession.shared.dataTask(with: url) { data, response, error in
    
  // ensure there is no error for this HTTP response
  guard error == nil else {
    print ("error: \(error!)")
    return
  }
    
  // ensure there is data returned from this HTTP response
  guard let data = data else {
    print("No data")
    return
  }
    
  // Parse JSON into array using JSONDecoder
  guard let posts = try? JSONDecoder().decode([Post].self, from: data) else {
    print("Error: Couldn't decode data")
    return
  }
    
  for Post in posts {
    print(Post.id)
    print(Post.type)
    print(Post.thumbnail)
    print(Post.link)
    print(Post.title.rendered)
    print("---")
  }
}
  
// execute the HTTP request
task.resume()

Donc aucun soucis pour afficher les données avec print, mais je souhaite maintenant l’afficher sous forme de liste dans SwiftUI et je galère un peu.

Merci d’avance pour votre aide.

Top si tu as trouvé une solution! :muscle:

Pour l’afficher en SwiftUI, sous forme de List, ça ne devrait pas être très dur, à partir du moment où tu es à l’aise avec les List.

Montre moi le code qui te pose soucis, le code où tu construits la liste en partant d’un tableau de Post, je pourrai probablement t’aider :wink:

Bonne soirée,

Alexandre

Alors le code de ma liste est pour le moment seulement static. Je n’ai pas un tres gros niveau, j’ai commencé le développement swift depuis peu.

Voila :

        List(0 ..< 20){ item in
            Image("img1")
                .resizable()
                .aspectRatio(contentMode: .fit)
                .frame(width: 80, height:80)
                .cornerRadius(40.0)
                //.padding(.leading, 5.0)
            Text("iPhone : Apple voudrait utiliser ses propres modems 5G dès 2022 ")
         //Spacer()
        }

Tu peux trouver des bons exemples ici:

https://developer.apple.com/tutorials/swiftui/

Y’a une belle suite de tuto pour la List, ce qui pourrait t’intéresser :wink:

Bonne soirée,

Alexandre

merci je vais regarder

Hello @djibs,

Je viens de tomber sur ça dans une de mes mail list; peut-être que ça pourra t’aider :crossed_fingers:

En espérant t’avoir aidé,

Bonne journée,