Flutter Json Encode List

31,213

Solution 1

Add toJson method to your Player class:

Map<String, dynamic> toJson(){
  return {
    "name": this.name,
    "imagePath": this.imagePath,
    "totalGames": this.totalGames,
    "points": this.points
  };
}

Then you can call jsonEncode on the list of players:

String encoded = jsonEncode(players) // this will automatically call toJson on each player

Solution 2

Add on class:

Map<String,dynamic> toJson(){
    return {
        "name": this.name,
        "imagePath": this.imagePath,
        "totalGames": this.totalGames,
        "points": this.points
    };
  }

and call

String json = jsonEncode(players.map((i) => i.toJson()).toList()).toString();

Solution 3

List jsonList = players.map((player) => player.toJson()).toList();
print("jsonList: ${jsonList}");
Share:
31,213

Related videos on Youtube

willy wijaya
Author by

willy wijaya

Updated on July 09, 2022

Comments

  • willy wijaya
    willy wijaya almost 2 years

    How to encode list to json?

    This is my class for Json.

    class Players{
      List<Player> players;
    
      Players({this.players});
    
      factory Players.fromJson(List<dynamic> parsedJson){
    
        List<Player> players = List<Player>();
        players = parsedJson.map((i)=>Player.fromJson(i)).toList();
    
        return Players(
          players: players,
        );
      }
    }
    
    class Player{
      final String name;
      final String imagePath;
      final int totalGames;
      final int points;
    
      Player({this.name,this.imagePath, this.totalGames, this.points});
    
      factory Player.fromJson(Map<String, dynamic> json){
    
        return Player(
          name: json['name'],
          imagePath: json['imagePath'],
          totalGames: json['totalGames'],
          points: json['points'],
        );
      }
    }
    

    I managed to decode with fromJson, the result is in List. Now that I have another player to add in json and want to encode the list to json, have no idea to do it. It result always failed.

    var json = jsonDecode(data);
    List<Player> players = Players.fromJson(json).players;
    Player newPlayer = Player(name: _textEditing.text,imagePath: _imagePath,totalGames: 0,points: 0);
    players.add(newPlayer);
    String encode = jsonEncode(players.players);
    

    What do I need to add on Players or Player?

  • Lucas
    Lucas about 5 years
    You don't need the static function. jsonEncode will work with a List<Player> if the class has toJson implemented.
  • willy wijaya
    willy wijaya about 5 years
    @Lucas You are right! No need for static function. Thank you!
  • Manoj Choudhari
    Manoj Choudhari over 4 years
    Can you please add description on why this solves the issue mentioned in the question ?
  • Steven
    Steven about 4 years
    Can you explain why is variable json declared as String? I'm quite confused
  • Lucio Pelinson
    Lucio Pelinson about 4 years
    Hi Steven, sometimes we need to work with json as plain/text, but it's just an example.