operator [] method
if key
is String
& type
is map
return json whose object is map[k]
, otherwise return json.nil
with error.
if key
is int
& type
is list
return json whose object is list[k]
, otherwise return json.nil
with error.
if key
is List<String/int>
recursive aboves.
Implementation
JSON operator [](dynamic key) {
var r = JSON.nil;
if (key is String) {
if (_type == Type.map) {
final o = _rawMap[key];
if (o == null) {
r.error = _JSONNilReason.notExist(key);
} else {
return JSON(o);
}
} else {
r.error = _JSONNilReason.wrongType(key, true);
}
return r;
} else if (key is List) {
return key.fold(this, (j, sk) => j[sk]);
} else if (key is int) {
if (_type == Type.list) {
if (key < _rawList.length) {
return JSON(_rawList[key]);
} else {
r.error = _JSONNilReason.outOfBounds(key);
}
}
r.error = _JSONNilReason.wrongType(key, false);
return r;
}
return r;
}