前提・実現したいこと
APIを発行し、Jsonデータを取得後、変換させようとしたところ、エラーが発生しており、どのように修正すれば良いか分からず困っています。
発生している問題・エラーメッセージ
Article article = Article.fromJson(articleMap); print('article: ${article}');
上記の部分が原因により、
[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: type 'List<dynamic>' is not a subtype of type 'Map<String, dynamic>'
のエラーメッセージが出力されています。
変換が理由だと思うのですが、よく分かっていません。。
該当のソースコード
main.dart(抜粋)
Dart
1 Future<void> _selectArticleList() async { 2 final response = await http.get("https://qiita.com/api/v2/items", 3 headers: {"Content-Type": "application/json", "Authorization": "Bearer xxxxxxxxxxxxxxxxxxxxxx"}); 4 print("ステータス: ${response.statusCode}"); 5 print("中身: ${response.body}"); 6 if (response.statusCode == 200) { 7 final articleMap = json.decode(response.body); 8 print('articleMap: ${articleMap}'); 9 Article article = Article.fromJson(articleMap); # ここでエラー 10 print('article: ${article}'); 11 } 12 }
article.dart
Dart
1import 'package:json_annotation/json_annotation.dart'; 2 3part 'article.g.dart'; 4 5() 6class Article { 7 (name: 'created_at') 8 final String createdAt; 9 final String id; 10 (name: 'likes_count') 11 final int likesCount; 12 final String title; 13 final String url; 14 15 Article({ 16 this.createdAt, 17 this.id, 18 this.likesCount, 19 this.title, 20 this.url, 21 }); 22 23 factory Article.fromJson(Map<String, dynamic> json) => _$ArticleFromJson(json); 24 25 Map<String, dynamic> toJson() => _$ArticleToJson(this); 26}
article.g.dart
Dart
1// GENERATED CODE - DO NOT MODIFY BY HAND 2 3part of 'article.dart'; 4 5// ************************************************************************** 6// JsonSerializableGenerator 7// ************************************************************************** 8 9Article _$ArticleFromJson(Map<String, dynamic> json) { 10 return Article( 11 createdAt: json['created_at'] as String, 12 id: json['id'] as String, 13 likesCount: json['likes_count'] as int, 14 title: json['title'] as String, 15 url: json['url'] as String, 16 ); 17} 18 19Map<String, dynamic> _$ArticleToJson(Article instance) => <String, dynamic>{ 20 'created_at': instance.createdAt, 21 'id': instance.id, 22 'likes_count': instance.likesCount, 23 'title': instance.title, 24 'url': instance.url, 25 };
対象のJsonレスポンス
json
1[ 2 { 3 "rendered_body": "\n\u003ch1\u003e\n\u003cspan id=\"qiitateamの運用方法を考える\" class=\"/\u003e\u003c/a\u003e\n", 4 "coediting": true, 5 "comments_count": 0, 6 "created_at": "2019-09-21T08:33:45+09:00", 7 "group": null, 8 "id": "12qwqeqeqeq", 9 "likes_count": 0, 10 "private": false, 11 "reactions_count": 0, 12 "tags": [ 13 { 14 "name": "チュートリアル", 15 "versions": [] 16 } 17 ], 18 "title": "ステップ6 Qiita:Team運用方法のヒント", 19 "updated_at": "2019-09-21T08:33:45+09:00", 20 "url": "https://qiita.com/shared/items/xxxxxxx", 21 "user": { 22 "description": "", 23 "facebook_id": "", 24 "followees_count": 0, 25 "followers_count": 0, 26 "github_login_name": null, 27 "id": "xxxx", 28 "items_count": 0, 29 "linkedin_id": "", 30 "location": "", 31 "name": "S", 32 "organization": "", 33 "permanent_id": 392512, 34 "profile_image_url": "https://xxxxxxxx", 35 "team_only": false, 36 "twitter_screen_name": null, 37 "website_url": "" 38 }, 39 "page_views_count": null 40 } 41]
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/24 12:03
2019/09/24 21:44 編集
2019/09/25 10:21