resolve method

JsonPathResult resolve(
  1. dynamic root
)

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);
}