Skip to content

Instantly share code, notes, and snippets.

@cavaon-wayne
Created January 4, 2021 16:43
Show Gist options
  • Select an option

  • Save cavaon-wayne/01756b04e052a5971d6c3a390c4e0c2f to your computer and use it in GitHub Desktop.

Select an option

Save cavaon-wayne/01756b04e052a5971d6c3a390c4e0c2f to your computer and use it in GitHub Desktop.
Null aware on JSON response
void main() {
var json = {
"k1": [
{
"m1": ["n1"]
},
{
"m1": ["n2"]
}
],
"k2": [
{
"m1": ["n3"]
}
]
};
dynamic mapOrListGet(dynamic map, List path) {
assert(path.length > 0);
assert(map is List || map is Map);
var m = map ?? const {};
var firstEl = path.removeAt(0);
var result = (m is List)
? (firstEl < m.length ? m.elementAt(firstEl) : null)
: m[firstEl];
if (path.length == 0 || result == null) {
return result;
} else {
return mapOrListGet(result, path);
}
}
print(mapOrListGet(json, ["k1", 0, "m1", 0]));
print(mapOrListGet(json, ["k1", 0, "m1", 2]));
print(mapOrListGet(json, ["k3", 0, "m1"]));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment