protected void init() { if (segments != null) { return; } if ("*".equals(path)) { this.segments = new Segment[] { WildCardSegment.instance }; } else { JSONPathParser parser = new JSONPathParser(path); this.segments = parser.explain(); this.hasRefSegment = parser.hasRefSegment; } }
protected Operator readOp() { Operator op = null; if (ch == '=') { next(); if (ch == '~') { next(); op = Operator.REG_MATCH; } else if (ch == '=') { next(); op = Operator.EQ; } else { next(); accept('='); op = Operator.NE; } else if (ch == '<') { next(); if (ch == '=') { next(); op = Operator.LE; } else { next(); if (ch == '=') { next(); op = Operator.GE; } else { String name = readName();
protected Object readValue() { skipWhitespace(); if (isDigitFirst(ch)) { return readLongValue(); } if (ch == '"' || ch == '\'') { return readString(); } if (ch == 'n') { String name = readName(); if ("null".equals(name)) { return null; } else { throw new JSONPathException(path); } } throw new UnsupportedOperationException(); }
Object parseArrayAccessFilter(boolean acceptBracket) { if (acceptBracket) { accept('['); next(); accept('('); predicateFlag = true; boolean self = false; if (ch == '@') { next(); accept('.'); self = true; String propertyName = readName(); skipWhitespace(); next(); next(); filter = filterRest(filter); accept(']'); next(); Filter filter = new NotNullSegement(propertyName); while (ch == ' ') { next();
Segment readSegement() { if (level == 0 && path.length() == 1) { if (isDigitFirst(ch)) { int index = ch - '0'; return new ArrayAccessSegment(index); while (!isEOF()) { skipWhitespace(); next(); continue; int c0 = ch; boolean deep = false; next(); if (c0 == '.' && ch == '.') { next(); deep = true; if (path.length() > pos + 3 && path.charAt(pos + 1) == ']' && path.charAt(pos + 2) == '.') { next(); next(); next(); next(); if (!isEOF()) { next();
Object parseArrayAccessFilter(boolean acceptBracket) { if (acceptBracket) { accept('['); next(); accept('('); predicateFlag = true; boolean self = false; if (ch == '@') { next(); accept('.'); self = true; String propertyName = readName(); skipWhitespace(); next(); next(); filter = filterRest(filter); accept(']'); next(); Filter filter = new NotNullSegement(propertyName); while (ch == ' ') { next();
String readName() { skipWhitespace(); if (ch != '\\' && !Character.isJavaIdentifierStart(ch)) { throw new JSONPathException("illeal jsonpath syntax. " + path); } StringBuilder buf = new StringBuilder(); while (!isEOF()) { if (ch == '\\') { next(); buf.append(ch); if (isEOF()) { return buf.toString(); } next(); continue; } boolean identifierFlag = Character.isJavaIdentifierPart(ch); if (!identifierFlag) { break; } buf.append(ch); next(); } if (isEOF() && Character.isJavaIdentifierPart(ch)) { buf.append(ch); } return buf.toString(); }
protected Object readValue() { skipWhitespace(); if (isDigitFirst(ch)) { return readLongValue(); } if (ch == '"' || ch == '\'') { return readString(); } if (ch == 'n') { String name = readName(); if ("null".equals(name)) { return null; } else { throw new JSONPathException(path); } } throw new UnsupportedOperationException(); }
Segment readSegement() { if (level == 0 && path.length() == 1) { if (isDigitFirst(ch)) { int index = ch - '0'; return new ArrayAccessSegment(index); while (!isEOF()) { skipWhitespace(); next(); continue; int c0 = ch; boolean deep = false; next(); if (c0 == '.' && ch == '.') { next(); deep = true; if (path.length() > pos + 3 && path.charAt(pos + 1) == ']' && path.charAt(pos + 2) == '.') { next(); next(); next(); next(); if (!isEOF()) { next();
protected Operator readOp() { Operator op = null; if (ch == '=') { next(); if (ch == '~') { next(); op = Operator.REG_MATCH; } else if (ch == '=') { next(); op = Operator.EQ; } else { next(); accept('='); op = Operator.NE; } else if (ch == '<') { next(); if (ch == '=') { next(); op = Operator.LE; } else { next(); if (ch == '=') { next(); op = Operator.GE; } else { String name = readName();
public final void skipWhitespace() { for (;;) { if (ch <= ' ' && (ch == ' ' || ch == '\r' || ch == '\n' || ch == '\t' || ch == '\f' || ch == '\b')) { next(); continue; } else { break; } } }
public JSONPathParser(String path){ this.path = path; next(); }
Filter filterRest(Filter filter) { boolean and = ch == '&'; if ((ch == '&' && getNextChar() == '&') || (ch == '|' && getNextChar() == '|')) { next(); next(); while (ch == ' ') { next(); } Filter right = (Filter) parseArrayAccessFilter(false); filter = new FilterGroup(filter, right, and); } return filter; }
String readName() { skipWhitespace(); if (ch != '\\' && !Character.isJavaIdentifierStart(ch)) { throw new JSONPathException("illeal jsonpath syntax. " + path); } StringBuilder buf = new StringBuilder(); while (!isEOF()) { if (ch == '\\') { next(); buf.append(ch); if (isEOF()) { return buf.toString(); } next(); continue; } boolean identifierFlag = Character.isJavaIdentifierPart(ch); if (!identifierFlag) { break; } buf.append(ch); next(); } if (isEOF() && Character.isJavaIdentifierPart(ch)) { buf.append(ch); } return buf.toString(); }
public JSONPathParser(String path){ this.path = path; next(); }