Comment la Carte de Flottement de Chaînes JSON à partir de la Liste?

Je suis avec succès l'impression que ma réponse comme une Chaîne de caractères à partir de mon YouTube JSON url, mais quand j'essaie de sérialiser à travers les "éléments" j'obtiens l'erreur suivante Unhandled exception:
type 'List' is not a subtype of type 'Map' of 'json' where
List is from dart:core
Map is from dart:core

Voici mon code...

class CardInfo {
  //Constructor
  String id;
  String description;
  String role;
  //int score;

  CardInfo.fromJson(Map json) {
    this.id = json['vieoId'];
    this.description = json['description'];
    this.role = json['title'];
    //this.score = json['score'];
  }
}

Future getData() async {
    String url = 'YouTube url';
    var httpClient  = createHttpClient();
    var response = await httpClient.get(url);
    Map data = JSON.decode(response.body);
    //String ip = data['items'];
    var ci = new CardInfo.fromJson(data['items']);

    //print(data['items']);
    print(ci.id);
    //print(ci.description);
    //print(ci.role);

    if (!mounted) return;


    setState(() {});

  }

print(data['items'] est de l'impression, mais print(ci.id) ou toutes les informations de Carte de variables jette l'erreur ci-dessus.

**** Journal de print(data);

{kind: youtube#searchListResponse, etag: "VPWTmrH7dFmi4s1RqrK4tLejnRI/P9wyOxsXEuXOCvj7znCun2-EykU", nextPageToken: CAMQAA, regionCode: US, pageInfo: {totalResults: 1000000, resultsPerPage: 3}, items: [{kind: youtube#searchResult, etag: "VPWTmrH7dFmi4s1RqrK4tLejnRI/Csl1kQhnOsbs0j4_336zJAN176k", id: {kind: youtube#video, videoId: e3pUxU_bE6w}, snippet: {publishedAt: 2017-09-14T09:43:17.000Z, channelId: UCbD8EppRX3ZwJSou-TVo90A, title: [PRISTIN - We Like] KPOP TV Show | M COUNTDOWN 170914 EP.541, description: KPOP Chart Show M COUNTDOWN | EP.541 - PRISTIN - We LikeWatch more video clips: http://MCOUNTDOWN-KPOP2017 [Kor Ver.] 프리티 ..., thumbnails: {default: {url: https://i.ytimg.com/vi/e3pUxU_bE6w/default.jpg, width: 120, height: 90}, medium: {url: https://i.ytimg.com/vi/e3pUxU_bE6w/mqdefault.jpg, width: 320, height: 180}, high: {url: https://i.ytimg.com/vi/e3pUxU_bE6w/hqdefault.jpg, width: 480, height: 360}}, channelTitle: Mnet K-POP, liveBroadcastContent: none}}, {kind: youtube#searchResult, etag: "VPWTmrH7dFmi4s1RqrK4tLejnRI/1JCCNBPNbFeusCp_9-pl4i8q5OU", id: {kind: youtube#video, videoId: Cc4hO9RLdl4}, snippet: {publishedAt: 2017-09-14T10:37:29.000Z, channelId: UCbD8EppRX3ZwJSou-TVo90A, title: [EXO - Power] KPOP TV Show | M COUNTDOWN 170914 EP.541, description: KPOP Chart Show M COUNTDOWN | EP.541 - EXO - Power ▷Watch more video clips: http://MCOUNTDOWN-KPOP2017 [Kor Ver.] Power Up! '#EXO' 여기 ..., thumbnails: {default: {url: https://i.ytimg.com/vi/Cc4hO9RLdl4/default.jpg, width: 120, height: 90}, medium: {url: https://i.ytimg.com/vi/Cc4hO9RLdl4/mqdefault.jpg, width: 320, height: 180}, high: {url: https://i.ytimg.com/vi/Cc4hO9RLdl4/hqdefault.jpg, width: 480, height: 360}}, channelTitle: Mnet K-POP, liveBroadcastContent: none}}, {kind: youtube#searchResult, etag: "VPWTmrH7dFmi4s1RqrK4tLejnRI/ZnYC4e5evyfldkM67HsDuV8Yh3E", id: {kind: youtube#video, videoId: BBcOM25wrVo}, snippet: {publishedAt: 2017-08-18T15:21:48.000Z, channelId: UCtFtO4By4czgkYGvEXvJu0A, title: Kpop Banned Dance: MV vs LIVE, description: Kpop Banned Dance: MV vs LIVE Koreas biggest broadcasting companies has strict rules and standards on what lyrics and dances moves can be performed., thumbnails: {default: {url: https://i.ytimg.com/vi/BBcOM25wrVo/default.jpg, width: 120, height: 90}, medium: {url: https://i.ytimg.com/vi/BBcOM25wrVo/mqdefault.jpg, width: 320, height: 180}, high: {url: https://i.ytimg.com/vi/BBcOM25wrVo/hqdefault.jpg, width: 480, height: 360}}, channelTitle: Kpop Corn, liveBroadcastContent: none}}]}

*** MISE À JOUR AVEC POUR INSTRUCTION LOOP

Voici le code de mon for loop qui retourne un type 'String' is not a subtype of type 'int' of 'index' erreur...

Map data = JSON.decode(response);
var videos = data['items'];
for (var items in videos['snippet']){
      print(items);
    }

L'exécution d'une boucle à travers items in videos me donne 3 entrées séparées pour les 3 vidéos que je suis à la recherche pour - y compris des extraits. Essayer d'obtenir de la personne des extraits est un échec. Merci de me pointer dans la bonne direction.

  • Je crois que vous êtes de passage à la value de la key "items", qui, dès le coup d'oeil, il est en fait un List pas un Map, votre constructeur doit recevoir un Map mais au lieu de cela vous êtes de passage à un List. Par conséquent, vous obtenez le message d'erreur. Sinon, pouvez-vous me montrer print(data) pour voir comment votre base de données est construite ?
  • Merci pour la leçon ci-dessous. Map = NSDictionary et Liste = NSArray. J'ai remarqué qu'il y a un itar et iter pour itérer sur une Liste.; Je suis en train de lire de la documentation sur ces maintenant. J'ai ajouté print(data) à ma question. S'il vous plaît aider obtenir des Cartes de titres, videoId, des descriptions et "moyen" de vignettes d'url. Je vous remercie.
  • De ce que je vois que vous essayez d'accéder aux valeurs de snippet de items. Donc, vous avez besoin de faire une boucle sur vos données['items'] indice par indice, puis cochez la case lorsque vous atteignez le "talon" de la clé, et de passer cette carte en particulier, à votre constructeur de la classe.
  • En essayant de regarder à travers items pour me rendre à mon snippets jeté l'erreur ci-dessus. Veuillez passer en revue.
InformationsquelleAutor Charles Jr | 2017-09-14