'Flutter Json Encode List
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?
Solution 1:[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:[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:[3]
List jsonList = players.map((player) => player.toJson()).toList();
print("jsonList: ${jsonList}");
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Sami Haddad |
| Solution 2 | |
| Solution 3 | FreddCha |
