resolve method
Walks root one segment at a time, reporting where it stopped.
Missing keys and out-of-range indices are reported rather than silently yielding the root, so a typo or a schema change is visible.
Implementation
JsonPathResult resolve(dynamic root) {
dynamic current = root;
for (var i = 0; i < segments.length; i++) {
final segment = segments[i];
if (segment is int) {
if (current is List && segment >= 0 && segment < current.length) {
current = current[segment];
continue;
}
return JsonPathResult.missing(describePrefix(i));
}
if (current is Map && current.containsKey(segment)) {
current = current[segment];
continue;
}
return JsonPathResult.missing(describePrefix(i));
}
return JsonPathResult.found(current);
}