/** * Parse a JSON Path expression. Segments are separated by a single forward slash ('{@code /}'); any '{@code ~}' or '{@code /} * ' literals must be escaped. Trailing slashes are ignored. * * @param path the path as a string; may not be null, but may be an empty string or "/" for a root path * @param resolveJsonPointerEscapes {@code true} if '{@code ~}' and '{@code /} ' literals are to be escaped as '{@code ~0}' * and '{@code ~1}', respectively, or {@code false} if they are not to be escaped * @return the path object; never null */ static Path parse(String path, boolean resolveJsonPointerEscapes) { return Paths.parse(path, resolveJsonPointerEscapes); }
static Path parse(String path, boolean resolveJsonPointerEscapes) { // Remove leading and trailing whitespace and '/' characters ... path = Strings.trim(path, (c) -> c < ' ' || c == '/'); if (path.length() == 0) return RootPath.INSTANCE; String[] segments = PATH_SEPARATOR_PATTERN.split(path); if (segments.length == 1) { return new SingleSegmentPath(parseSegment(segments[0], resolveJsonPointerEscapes)); } if (resolveJsonPointerEscapes) { for (int i = 0; i != segments.length; ++i) segments[i] = parseSegment(segments[i], true); } return new MultiSegmentPath(segments); }
@Override public Path append(Path relPath) { if (relPath.isRoot()) return this; if (relPath.isSingle()) return new ChildPath(this, relPath.lastSegment().get()); String[] segments = new String[size() + relPath.size()]; int offset = this.copyInto(segments, 0); copyPathInto(relPath, segments, offset); return new MultiSegmentPath(segments); }
@Override public Path append(Path relPath) { if (relPath.isRoot()) return this; if (relPath.isSingle()) return new ChildPath(this, relPath.lastSegment().get()); String[] segments = new String[size() + relPath.size()]; int offset = this.copyInto(segments, 0); copyPathInto(relPath, segments, offset); return new MultiSegmentPath(segments); }
/** * Parse a JSON Path expression. Segments are separated by a single forward slash ('{@code /}'); any '{@code ~}' or '{@code /} * ' literals must be escaped. Trailing slashes are ignored. * * @param path the path as a string; may not be null, but may be an empty string or "/" for a root path * @return the path object; never null */ static Path parse(String path) { return Paths.parse(path, true); }
@Override public Path append(Path relPath) { if (relPath.isRoot()) return this; if (relPath.isSingle()) return new ChildPath(this, relPath.lastSegment().get()); String[] segments = new String[size() + relPath.size() + 1]; int offset = copyInto(segments, 0); copyPathInto(relPath, segments, offset); return new MultiSegmentPath(segments); }
static Path parse(String path, boolean resolveJsonPointerEscapes) { // Remove leading and trailing whitespace and '/' characters ... path = Strings.trim(path, (c) -> c < ' ' || c == '/'); if (path.length() == 0) return RootPath.INSTANCE; String[] segments = PATH_SEPARATOR_PATTERN.split(path); if (segments.length == 1) { return new SingleSegmentPath(parseSegment(segments[0], resolveJsonPointerEscapes)); } if (resolveJsonPointerEscapes) { for (int i = 0; i != segments.length; ++i) segments[i] = parseSegment(segments[i], true); } return new MultiSegmentPath(segments); }
protected Path parse( String path ) { return Paths.parse(path, false); }
@Override public Path append(Path relPath) { if (relPath.isRoot()) return this; if (relPath.isSingle()) return new ChildPath(this, relPath.lastSegment().get()); String[] segments = new String[size() + relPath.size()]; int offset = this.copyInto(segments, 0); copyPathInto(relPath, segments, offset); return new MultiSegmentPath(segments); }
/** * Parse a JSON Path expression. Segments are separated by a single forward slash ('{@code /}'); any '{@code ~}' or '{@code /} * ' literals must be escaped. Trailing slashes are ignored. * * @param path the path as a string; may not be null, but may be an empty string or "/" for a root path * @return the path object; never null */ static Path parse(String path) { return Paths.parse(path, true); }
@Override public Path append(Path relPath) { if (relPath.isRoot()) return this; if (relPath.isSingle()) return new ChildPath(this, relPath.lastSegment().get()); String[] segments = new String[size() + relPath.size()]; int offset = this.copyInto(segments, 0); copyPathInto(relPath, segments, offset); return new MultiSegmentPath(segments); }
/** * Parse a JSON Path expression. Segments are separated by a single forward slash ('{@code /}'); any '{@code ~}' or '{@code /} * ' literals must be escaped. Trailing slashes are ignored. * * @param path the path as a string; may not be null, but may be an empty string or "/" for a root path * @param resolveJsonPointerEscapes {@code true} if '{@code ~}' and '{@code /} ' literals are to be escaped as '{@code ~0}' * and '{@code ~1}', respectively, or {@code false} if they are not to be escaped * @return the path object; never null */ static Path parse(String path, boolean resolveJsonPointerEscapes) { return Paths.parse(path, resolveJsonPointerEscapes); }
@Override public Path append(Path relPath) { if (relPath.isRoot()) return this; if (relPath.isSingle()) return new ChildPath(this, relPath.lastSegment().get()); String[] segments = new String[size() + relPath.size() + 1]; int offset = copyInto(segments, 0); copyPathInto(relPath, segments, offset); return new MultiSegmentPath(segments); }