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 Like ▷Watch 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 lakey
"items"
, qui, dès le coup d'oeil, il est en fait unList
pas unMap
, votre constructeur doit recevoir unMap
mais au lieu de cela vous êtes de passage à unList
. 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
etiter
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
deitems
. 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 à monsnippets
jeté l'erreur ci-dessus. Veuillez passer en revue.
Vous devez vous connecter pour publier un commentaire.
Il ressemble
data['items']
est unList
(c'est à dire un Tableau JSON), pas unMap
.Vous pouvez utiliser compréhension de liste des méthodes pour aider ici:
Dictionary
n'est pas la même chose qu'unList
. Ils sont deux collections différentes. En fait, unDictionary
est en fait unMap
. Merci de lire mon commentaire sur la question et d'essayer de vérifierprint (data['items'])
, vous trouverez que votre valeur pour les articles est en fait unList
d'unMap
, quelque chose de semblable à ce'items': [{..:..},{..:..}....]
for loop
. Veuillez jeter un oeil à mes questions à jour et l'ajouter à votre réponse.La ligne suivante vous donne la
List
deitems
.et vous obtenez l'erreur à cause de cette ligne
Dans la ligne précédente, vous pensez que vous êtes une itération sur les données à l'intérieur de
snippet
, alors qu'en réalité, vous essayez d'effectuer une itération sur l'index extrait de " à l'intérieur de la liste de vidéos, qui n'est pas logique parce que de parcourir toute la liste qui se passe à l'aide des valeurs entièresvideos[0] , videos [1], videos [2]
.. alors que vous êtes de passage à unString
'snippet'
Vous devez d'abord effectuer une itération sur votre
videos
liste élément par élément (chaque élément est une Carte). Stocker chaqueMap
dans une variable. ensuite, vous pouvez accéder aux valeurs desnippet
parmyMap['snippet']
Voir si cela résout votre problème.
J'aimerais partager cela et certains experts peuvent aussi s'il vous plaît améliorer ce codes, Après beaucoup d'heures de bataille avec elle.
Modèle De Classe
LA CLASSE DE L'API
MainWidget pour l'INTERFACE utilisateur
Widget