web-dev-qa-db-fra.com

Comment désérialiser une liste d'objets de json en flutter

J'utilise le package Dart json_serializable pour la sérialisation JSON. La documentation sur le flutter montre comment désérialiser un seul objet comme suit:

Future<Post> fetchPost() async {
  final response =
  await http.get('https://jsonplaceholder.typicode.com/posts/1');

  if (response.statusCode == 200) {
  // If the call to the server was successful, parse the JSON
  return Post.fromJson(json.decode(response.body));
  } else {
    // If that call was not successful, throw an error.
    throw Exception('Failed to load post');
  }
}

Cependant, je ne suis pas assez familier avec Dart pour comprendre comment faire la même chose pour une liste d’éléments au lieu d’une seule instance.

7
Gainz

Votre service traitera le corps de la réponse sous forme de carte ou une liste de cartes en conséquence. En fonction du code que vous avez, vous comptabilisez un élément.

Si le corps de la réponse est itérable, vous devez analyser et marcher en conséquence, si je comprends bien votre question.

Exemple:

Iterable l = json.decode(response.body);
List<Post> posts = l.map((Map model)=> Post.fromJson(model)).toList();

où posts est une liste de posts.

14
Fallenreaper

Juste un autre exemple sur l'analyse JSON pour plus de précisions.

Disons que nous voulons analyser le tableau d'éléments dans notre objet JSON.

factory YoutubeResponse.fromJSON(Map<String, dynamic> YoutubeResponseJson) 
 {

// Below 2 line code is parsing JSON Array of items in our JSON Object (YouttubeResponse)


var list = YoutubeResponseJson['items'] as List;
List<Item> itemsList = list.map((i) => Item.fromJSON(i)).toList();

return new YoutubeResponse(
    kind: YoutubeResponseJson['kind'],
    etag: YoutubeResponseJson['etag'],
    nextPageToken: YoutubeResponseJson['nextPageToken'],
    regionCode: YoutubeResponseJson['regionCode'],
    mPageInfo: pageInfo.fromJSON(YoutubeResponseJson['pageInfo']),

    // Here we are returning parsed JSON Array.

    items: itemsList);

  }
1
Hammad Tariq