Skip to content

Instantly share code, notes, and snippets.

@xantiagoma
Created December 15, 2018 03:34
Show Gist options
  • Save xantiagoma/c83b736f9ded8f56dc9f38c1ea09f478 to your computer and use it in GitHub Desktop.
Save xantiagoma/c83b736f9ded8f56dc9f38c1ea09f478 to your computer and use it in GitHub Desktop.
Dart Example Parse/Decode JSON Nested Classes
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"])
);
}
}
{
"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"
}
}
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