Created
December 15, 2018 03:34
-
-
Save xantiagoma/c83b736f9ded8f56dc9f38c1ea09f478 to your computer and use it in GitHub Desktop.
Dart Example Parse/Decode JSON Nested Classes
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:dart_date/dart_date.dart'; | |
import 'dart:convert'; | |
class LastActivities { | |
Date all; | |
MoviesActivities movies; | |
EpisodesActivities episodes; | |
ShowsActivities shows; | |
SeasonsActivities seasons; | |
CommentsActivities comments; | |
ListsActivities lists; | |
LastActivities(this.all, this.movies, this.episodes, this.shows, this.seasons, this.comments, this.lists); | |
String toJson() { | |
var jsm = Map<String, Object>(); | |
jsm['all'] = all.toIso8601String(); | |
jsm['movies'] = movies.toMap(); | |
jsm['episodes'] = episodes.toMap(); | |
jsm['shows'] = shows.toMap(); | |
jsm['seasons'] = seasons.toMap(); | |
jsm['comments'] = comments.toMap(); | |
jsm['lists'] = lists.toMap(); | |
var jss = json.encode(jsm); | |
return jss; | |
} | |
Map toMap() { | |
return json.decode(this.toJson()); | |
} | |
static LastActivities fromJson(String jsonStr) { | |
Map jsm = json.decode(jsonStr); | |
return LastActivities.fromMap(jsm); | |
} | |
static LastActivities fromMap(Map jsm) { | |
Date all = Date.parse(jsm["all"]); | |
MoviesActivities movies = MoviesActivities.fromMap(jsm["movies"]); | |
EpisodesActivities episodes = EpisodesActivities.fromMap(jsm["episodes"]); | |
ShowsActivities shows = ShowsActivities.fromMap(jsm["shows"]); | |
SeasonsActivities seasons = SeasonsActivities.fromMap(jsm["seasons"]); | |
CommentsActivities comments = CommentsActivities.fromMap(jsm["comments"]); | |
ListsActivities lists = ListsActivities.fromMap(jsm["lists"]); | |
return LastActivities( | |
all, | |
movies, | |
episodes, | |
shows, | |
seasons, | |
comments, | |
lists | |
); | |
} | |
} | |
class MoviesActivities { | |
Date watched_at; | |
Date collected_at; | |
Date rated_at; | |
Date watchlisted_at; | |
Date commented_at; | |
Date paused_at; | |
Date hidden_at; | |
MoviesActivities( | |
this.watched_at, | |
this.collected_at, | |
this.rated_at, | |
this.watchlisted_at, | |
this.commented_at, | |
this.paused_at, | |
this.hidden_at); | |
String toJson() { | |
var jsm = Map<String, Object>(); | |
jsm['watched_at'] = watched_at.toIso8601String(); | |
jsm['collected_at'] = collected_at.toIso8601String(); | |
jsm['rated_at'] = rated_at.toIso8601String(); | |
jsm['watchlisted_at'] = watchlisted_at.toIso8601String(); | |
jsm['commented_at'] = commented_at.toIso8601String(); | |
jsm['paused_at'] = paused_at.toIso8601String(); | |
jsm['hidden_at'] = hidden_at.toIso8601String(); | |
var jss = json.encode(jsm); | |
return jss; | |
} | |
Map toMap() { | |
return json.decode(this.toJson()); | |
} | |
static MoviesActivities fromJson(String jsonStr) { | |
Map jsm = json.decode(jsonStr); | |
return MoviesActivities.fromMap(jsm); | |
} | |
static MoviesActivities fromMap(Map jsm) { | |
return MoviesActivities( | |
Date.parse(jsm["watched_at"]), | |
Date.parse(jsm["collected_at"]), | |
Date.parse(jsm["rated_at"]), | |
Date.parse(jsm["watchlisted_at"]), | |
Date.parse(jsm["commented_at"]), | |
Date.parse(jsm["paused_at"]), | |
Date.parse(jsm["hidden_at"]), | |
); | |
} | |
} | |
class EpisodesActivities { | |
Date watched_at; | |
Date collected_at; | |
Date rated_at; | |
Date watchlisted_at; | |
Date commented_at; | |
Date paused_at; | |
EpisodesActivities( | |
this.watched_at, | |
this.collected_at, | |
this.rated_at, | |
this.watchlisted_at, | |
this.commented_at, | |
this.paused_at | |
); | |
String toJson() { | |
var jsm = Map<String, Object>(); | |
jsm['watched_at'] = watched_at.toIso8601String(); | |
jsm['collected_at'] = collected_at.toIso8601String(); | |
jsm['rated_at'] = rated_at.toIso8601String(); | |
jsm['watchlisted_at'] = watchlisted_at.toIso8601String(); | |
jsm['commented_at'] = commented_at.toIso8601String(); | |
jsm['paused_at'] = paused_at.toIso8601String(); | |
var jss = json.encode(jsm); | |
return jss; | |
} | |
Map toMap() { | |
return json.decode(this.toJson()); | |
} | |
static EpisodesActivities fromJson(String jsonStr) { | |
Map jsm = json.decode(jsonStr); | |
return EpisodesActivities.fromMap(jsm); | |
} | |
static EpisodesActivities fromMap(Map jsm) { | |
return EpisodesActivities( | |
Date.parse(jsm["watched_at"]), | |
Date.parse(jsm["collected_at"]), | |
Date.parse(jsm["rated_at"]), | |
Date.parse(jsm["watchlisted_at"]), | |
Date.parse(jsm["commented_at"]), | |
Date.parse(jsm["paused_at"]), | |
); | |
} | |
} | |
class ShowsActivities { | |
Date rated_at; | |
Date watchlisted_at; | |
Date commented_at; | |
Date hidden_at; | |
ShowsActivities( | |
this.rated_at, | |
this.watchlisted_at, | |
this.commented_at, | |
this.hidden_at); | |
String toJson() { | |
var jsm = Map<String, Object>(); | |
jsm['rated_at'] = rated_at.toIso8601String(); | |
jsm['watchlisted_at'] = watchlisted_at.toIso8601String(); | |
jsm['commented_at'] = commented_at.toIso8601String(); | |
jsm['hidden_at'] = hidden_at.toIso8601String(); | |
var jss = json.encode(jsm); | |
return jss; | |
} | |
Map toMap() { | |
return json.decode(this.toJson()); | |
} | |
static ShowsActivities fromJson(String jsonStr) { | |
Map jsm = json.decode(jsonStr); | |
return ShowsActivities.fromMap(jsm); | |
} | |
static ShowsActivities fromMap(Map jsm) { | |
return ShowsActivities( | |
Date.parse(jsm["rated_at"]), | |
Date.parse(jsm["watchlisted_at"]), | |
Date.parse(jsm["commented_at"]), | |
Date.parse(jsm["hidden_at"]), | |
); | |
} | |
} | |
class SeasonsActivities { | |
Date rated_at; | |
Date watchlisted_at; | |
Date commented_at; | |
Date hidden_at; | |
SeasonsActivities( | |
this.rated_at, | |
this.watchlisted_at, | |
this.commented_at, | |
this.hidden_at); | |
String toJson() { | |
var jsm = Map<String, Object>(); | |
jsm['rated_at'] = rated_at.toIso8601String(); | |
jsm['watchlisted_at'] = watchlisted_at.toIso8601String(); | |
jsm['commented_at'] = commented_at.toIso8601String(); | |
jsm['hidden_at'] = hidden_at.toIso8601String(); | |
var jss = json.encode(jsm); | |
return jss; | |
} | |
Map toMap() { | |
return json.decode(this.toJson()); | |
} | |
static SeasonsActivities fromJson(String jsonStr) { | |
Map jsm = json.decode(jsonStr); | |
return SeasonsActivities.fromMap(jsm); | |
} | |
static SeasonsActivities fromMap(Map jsm) { | |
return SeasonsActivities( | |
Date.parse(jsm["rated_at"]), | |
Date.parse(jsm["watchlisted_at"]), | |
Date.parse(jsm["commented_at"]), | |
Date.parse(jsm["hidden_at"]), | |
); | |
} | |
} | |
class CommentsActivities { | |
Date liked_at; | |
CommentsActivities( | |
this.liked_at | |
); | |
String toJson() { | |
var jsm = Map<String, Object>(); | |
jsm['liked_at'] = liked_at.toIso8601String(); | |
var jss = json.encode(jsm); | |
return jss; | |
} | |
Map toMap() { | |
return json.decode(this.toJson()); | |
} | |
static CommentsActivities fromJson(String jsonStr) { | |
Map jsm = json.decode(jsonStr); | |
return CommentsActivities.fromMap(jsm); | |
} | |
static CommentsActivities fromMap(Map jsm) { | |
return CommentsActivities( | |
Date.parse(jsm["liked_at"]) | |
); | |
} | |
} | |
class ListsActivities { | |
Date liked_at; | |
Date updated_at; | |
Date commented_at; | |
ListsActivities( | |
this.liked_at, | |
this.updated_at, | |
this.commented_at | |
); | |
String toJson() { | |
var jsm = Map<String, Object>(); | |
jsm['liked_at'] = liked_at.toIso8601String(); | |
jsm['updated_at'] = updated_at.toIso8601String(); | |
jsm['commented_at'] = commented_at.toIso8601String(); | |
var jss = json.encode(jsm); | |
return jss; | |
} | |
Map toMap() { | |
return json.decode(this.toJson()); | |
} | |
static ListsActivities fromJson(String jsonStr) { | |
Map jsm = json.decode(jsonStr); | |
return ListsActivities.fromMap(jsm); | |
} | |
static ListsActivities fromMap(Map jsm) { | |
return ListsActivities( | |
Date.parse(jsm["liked_at"]), | |
Date.parse(jsm["updated_at"]), | |
Date.parse(jsm["commented_at"]) | |
); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"all": "2014-11-20T07:01:32.000Z", | |
"movies": { | |
"watched_at": "2014-11-19T21:42:41.000Z", | |
"collected_at": "2014-11-20T06:51:30.000Z", | |
"rated_at": "2014-11-19T18:32:29.000Z", | |
"watchlisted_at": "2014-11-19T21:42:41.000Z", | |
"commented_at": "2014-11-20T06:51:30.000Z", | |
"paused_at": "2014-11-20T06:51:30.000Z", | |
"hidden_at": "2016-08-20T06:51:30.000Z" | |
}, | |
"episodes": { | |
"watched_at": "2014-11-20T06:51:30.000Z", | |
"collected_at": "2014-11-19T22:02:41.000Z", | |
"rated_at": "2014-11-20T06:51:30.000Z", | |
"watchlisted_at": "2014-11-20T06:51:30.000Z", | |
"commented_at": "2014-11-20T06:51:30.000Z", | |
"paused_at": "2014-11-20T06:51:30.000Z" | |
}, | |
"shows": { | |
"rated_at": "2014-11-19T19:50:58.000Z", | |
"watchlisted_at": "2014-11-20T06:51:30.000Z", | |
"commented_at": "2014-11-20T06:51:30.000Z", | |
"hidden_at": "2016-08-20T06:51:30.000Z" | |
}, | |
"seasons": { | |
"rated_at": "2014-11-19T19:54:24.000Z", | |
"watchlisted_at": "2014-11-20T06:51:30.000Z", | |
"commented_at": "2014-11-20T06:51:30.000Z", | |
"hidden_at": "2016-08-20T06:51:30.000Z" | |
}, | |
"comments": { | |
"liked_at": "2014-11-20T03:38:09.000Z" | |
}, | |
"lists": { | |
"liked_at": "2014-11-20T00:36:48.000Z", | |
"updated_at": "2014-11-20T06:52:18.000Z", | |
"commented_at": "2014-11-20T06:51:30.000Z" | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:test/test.dart'; | |
import './last_activities.dart'; | |
import 'package:dart_date/dart_date.dart'; | |
var dateStr = "2014-11-20T07:01:32.000Z"; | |
var moviesJson = """ | |
{ | |
"watched_at": "$dateStr", | |
"collected_at": "$dateStr", | |
"rated_at": "$dateStr", | |
"watchlisted_at": "$dateStr", | |
"commented_at": "$dateStr", | |
"paused_at": "$dateStr", | |
"hidden_at": "$dateStr" | |
} | |
"""; | |
var episodesJson = """ | |
{ | |
"watched_at": "$dateStr", | |
"collected_at": "$dateStr", | |
"rated_at": "$dateStr", | |
"watchlisted_at": "$dateStr", | |
"commented_at": "$dateStr", | |
"paused_at": "$dateStr" | |
} | |
"""; | |
var showsJson = """ | |
{ | |
"rated_at": "$dateStr", | |
"watchlisted_at": "$dateStr", | |
"commented_at": "$dateStr", | |
"hidden_at": "$dateStr" | |
} | |
"""; | |
var seasonsJson = """ | |
{ | |
"rated_at": "$dateStr", | |
"watchlisted_at": "$dateStr", | |
"commented_at": "$dateStr", | |
"hidden_at": "$dateStr" | |
} | |
"""; | |
var commentsJson = """ | |
{ | |
"liked_at": "$dateStr" | |
} | |
"""; | |
var listsJson = """ | |
{ | |
"liked_at": "$dateStr", | |
"updated_at": "$dateStr", | |
"commented_at": "$dateStr" | |
} | |
"""; | |
var lastActivitiesJson = """ | |
{ | |
"all": "$dateStr", | |
"movies": $moviesJson, | |
"episodes": $episodesJson, | |
"shows": $showsJson, | |
"seasons": $seasonsJson, | |
"comments": $commentsJson, | |
"lists": $listsJson | |
} | |
"""; | |
String flatJSON(String json) { | |
return json.replaceAll(RegExp(r"(\n|\r\n|\ )"), ''); | |
} | |
void main(){ | |
group('LastActivies', () { | |
test('.toJSON() converts to a json string', () { | |
var date = Date.parse(dateStr); | |
var la = LastActivities( | |
date, | |
MoviesActivities(date, date, date, date, date, date, date), | |
EpisodesActivities(date, date, date, date, date, date), | |
ShowsActivities(date, date, date, date), | |
SeasonsActivities(date, date, date, date), | |
CommentsActivities(date), | |
ListsActivities(date, date, date) | |
); | |
expect(la.toJson(), equals(flatJSON(lastActivitiesJson))); | |
}); | |
test('.fromJSON() converts a json string to a object', () { | |
var date = Date.parse(dateStr); | |
var la = LastActivities.fromJson(lastActivitiesJson); | |
expect(la.all, equals(date)); | |
expect(la.movies.toJson(), equals(MoviesActivities(date, date, date, date, date, date, date).toJson())); | |
expect(la.episodes.toJson(), equals(EpisodesActivities(date, date, date, date, date, date).toJson())); | |
expect(la.shows.toJson(), equals(SeasonsActivities(date, date, date, date).toJson())); | |
expect(la.seasons.toJson(), equals(SeasonsActivities(date, date, date, date).toJson())); | |
expect(la.comments.toJson(), equals(CommentsActivities(date).toJson())); | |
expect(la.lists.toJson(), equals(ListsActivities(date, date, date).toJson())); | |
}); | |
}); | |
group('MoviesActivities', () { | |
test('.toJSON() converts to a json string', () { | |
var flatJsonStr = flatJSON(moviesJson); | |
var date = Date.parse(dateStr); | |
var ma = MoviesActivities(date, date, date, date, date, date, date); | |
expect(ma.toJson(), equals(flatJsonStr)); | |
}); | |
test('.fromJSON() converts a json string to a object', () { | |
var date = Date.parse(dateStr); | |
var la = MoviesActivities.fromJson(moviesJson); | |
var li = MoviesActivities(date, date, date, date, date, date, date); | |
expect(la.watched_at, equals(li.watched_at)); | |
expect(la.collected_at, equals(li.collected_at)); | |
expect(la.rated_at, equals(li.rated_at)); | |
expect(la.watchlisted_at, equals(li.watchlisted_at)); | |
expect(la.commented_at, equals(li.commented_at)); | |
expect(la.paused_at, equals(li.paused_at)); | |
expect(la.hidden_at, equals(li.hidden_at)); | |
}); | |
}); | |
group('EpisodesActivities', () { | |
test('.toJSON() converts to a json string', () { | |
var flatJsonStr = flatJSON(episodesJson); | |
var date = Date.parse(dateStr); | |
var ma = EpisodesActivities(date, date, date, date, date, date); | |
expect(ma.toJson(), equals(flatJsonStr)); | |
}); | |
test('.fromJSON() converts a json string to a object', () { | |
var date = Date.parse(dateStr); | |
var la = EpisodesActivities.fromJson(episodesJson); | |
var li = EpisodesActivities(date, date, date, date, date, date); | |
expect(la.watched_at, equals(li.watched_at)); | |
expect(la.collected_at, equals(li.collected_at)); | |
expect(la.rated_at, equals(li.rated_at)); | |
expect(la.watchlisted_at, equals(li.watchlisted_at)); | |
expect(la.commented_at, equals(li.commented_at)); | |
expect(la.paused_at, equals(li.paused_at)); | |
}); | |
}); | |
group('ShowsActivities', () { | |
test('.toJSON() converts to a json string', () { | |
var flatJsonStr = flatJSON(showsJson); | |
var date = Date.parse(dateStr); | |
var ma = ShowsActivities(date, date, date, date); | |
expect(ma.toJson(), equals(flatJsonStr)); | |
}); | |
test('.fromJSON() converts a json string to a object', () { | |
var date = Date.parse(dateStr); | |
var la = ShowsActivities.fromJson(showsJson); | |
var li = ShowsActivities(date, date, date, date); | |
expect(la.rated_at, equals(li.rated_at)); | |
expect(la.watchlisted_at, equals(li.watchlisted_at)); | |
expect(la.commented_at, equals(li.commented_at)); | |
expect(la.hidden_at, equals(li.hidden_at)); | |
}); | |
}); | |
group('SeasonsActivities', () { | |
test('.toJSON() converts to a json string', () { | |
var flatJsonStr = flatJSON(seasonsJson); | |
var date = Date.parse(dateStr); | |
var ma = SeasonsActivities(date, date, date, date); | |
expect(ma.toJson(), equals(flatJsonStr)); | |
}); | |
test('.fromJSON() converts a json string to a object', () { | |
var date = Date.parse(dateStr); | |
var la = SeasonsActivities.fromJson(seasonsJson); | |
var li = SeasonsActivities(date, date, date, date); | |
expect(la.rated_at, equals(li.rated_at)); | |
expect(la.watchlisted_at, equals(li.watchlisted_at)); | |
expect(la.commented_at, equals(li.commented_at)); | |
expect(la.hidden_at, equals(li.hidden_at)); | |
}); | |
}); | |
group('CommentsActivities', () { | |
test('.toJSON() converts to a json string', () { | |
var flatJsonStr = flatJSON(commentsJson); | |
var date = Date.parse(dateStr); | |
var ma = CommentsActivities(date); | |
expect(ma.toJson(), equals(flatJsonStr)); | |
}); | |
test('.fromJSON() converts a json string to a object', () { | |
var date = Date.parse(dateStr); | |
var la = CommentsActivities.fromJson(commentsJson); | |
var li = CommentsActivities(date); | |
expect(la.liked_at, equals(li.liked_at)); | |
}); | |
}); | |
group('ListsActivities', () { | |
test('.toJSON() converts to a json string', () { | |
var flatJsonStr = flatJSON(listsJson); | |
var date = Date.parse(dateStr); | |
var ma = ListsActivities(date, date, date); | |
expect(ma.toJson(), equals(flatJsonStr)); | |
}); | |
test('.fromJSON() converts a json string to a object', () { | |
var date = Date.parse(dateStr); | |
var la = ListsActivities.fromJson(listsJson); | |
var li = ListsActivities( | |
date, date, date | |
); | |
expect(la.liked_at, equals(li.liked_at)); | |
expect(la.updated_at, equals(li.updated_at)); | |
expect(la.commented_at, equals(li.commented_at)); | |
}); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment