Package com.fasterxml.jackson.core
Class JsonPointer
- java.lang.Object
-
- com.fasterxml.jackson.core.JsonPointer
-
public class JsonPointer extends java.lang.ObjectImplementation of JSON Pointer specification. Pointer instances can be used to locate logical JSON nodes for things like tree traversal (seeTreeNode.at(com.fasterxml.jackson.core.JsonPointer)). It may be used in future for filtering of streaming JSON content as well (not implemented yet for 2.3).Instances are fully immutable and can be cached, shared between threads.
- Since:
- 2.3
- Author:
- Tatu Saloranta
-
-
Field Summary
Fields Modifier and Type Field Description protected java.lang.String_asStringWe will retain representation of the pointer, as a String, so thattoString()should be as efficient as possible.protected JsonPointer_headReference from currently matching segment (if any) to node before leaf.protected int_matchingElementIndexprotected java.lang.String_matchingPropertyNameprotected JsonPointer_nextSegmentReference to rest of the pointer beyond currently matching segment (if any); null if this pointer refers to the matching segment.protected static JsonPointerEMPTYMarker instance used to represent segment that matches current node or position (that is, returns true formatches()).static charSEPARATORCharacter used to separate segments.
-
Constructor Summary
Constructors Modifier Constructor Description protectedJsonPointer()Constructor used for creating "empty" instance, used to represent state that matches current node.protectedJsonPointer(java.lang.String fullString, java.lang.String segment, int matchIndex, JsonPointer next)protectedJsonPointer(java.lang.String fullString, java.lang.String segment, JsonPointer next)Constructor used for creating non-empty Segments
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected JsonPointer_constructHead()protected JsonPointer_constructHead(int suffixLength, JsonPointer last)protected static JsonPointer_parseQuotedTail(java.lang.String input, int i)Method called to parse tail of pointer path, when a potentially escaped character has been seen.protected static JsonPointer_parseTail(java.lang.String input)JsonPointerappend(JsonPointer tail)Mutant factory method that will return `tail` if `this` instance is "empty" pointer, OR `this` instance if `tail` is "empty" pointer, OR Newly constructedJsonPointerinstance that starts with all segments of `this`, followed by all segments of `tail`.static JsonPointercompile(java.lang.String input)Factory method that parses given input and construct matching pointer instance, if it represents a valid JSON Pointer: if not, aIllegalArgumentExceptionis thrown.booleanequals(java.lang.Object o)static JsonPointerforPath(JsonStreamContext context, boolean includeRoot)Factory method that will construct a pointer instance that describes path to location givenJsonStreamContextpoints to.intgetMatchingIndex()java.lang.StringgetMatchingProperty()inthashCode()JsonPointerhead()Accessor for getting a pointer instance that is identical to this instance except that the last segment has been dropped.JsonPointerlast()Returns the leaf of current JSON Pointer expression.JsonPointermatchElement(int index)booleanmatches()booleanmatchesElement(int index)Method that may be called to see if the pointer would match array element (of a JSON Array) with given index.booleanmatchesProperty(java.lang.String name)Method that may be called to see if the pointer would match property (of a JSON Object) with given name.JsonPointermatchProperty(java.lang.String name)booleanmayMatchElement()booleanmayMatchProperty()JsonPointertail()Accessor for getting a "sub-pointer", instance where current segment has been removed and pointer includes rest of segments.java.lang.StringtoString()static JsonPointervalueOf(java.lang.String input)Alias forcompile(java.lang.String); added to make instances automatically deserializable by Jackson databind.
-
-
-
Field Detail
-
SEPARATOR
public static final char SEPARATOR
Character used to separate segments.- Since:
- 2.9
- See Also:
- Constant Field Values
-
EMPTY
protected static final JsonPointer EMPTY
Marker instance used to represent segment that matches current node or position (that is, returns true formatches()).
-
_nextSegment
protected final JsonPointer _nextSegment
Reference to rest of the pointer beyond currently matching segment (if any); null if this pointer refers to the matching segment.
-
_head
protected volatile JsonPointer _head
Reference from currently matching segment (if any) to node before leaf. Lazily constructed if/as needed.NOTE: we'll use `volatile` here assuming that this is unlikely to become a performance bottleneck. If it becomes one we can probably just drop it and things still should work (despite warnings as per JMM regarding visibility (and lack thereof) of unguarded changes).
- Since:
- 2.5
-
_asString
protected final java.lang.String _asString
We will retain representation of the pointer, as a String, so thattoString()should be as efficient as possible.
-
_matchingPropertyName
protected final java.lang.String _matchingPropertyName
-
_matchingElementIndex
protected final int _matchingElementIndex
-
-
Constructor Detail
-
JsonPointer
protected JsonPointer()
Constructor used for creating "empty" instance, used to represent state that matches current node.
-
JsonPointer
protected JsonPointer(java.lang.String fullString, java.lang.String segment, JsonPointer next)Constructor used for creating non-empty Segments
-
JsonPointer
protected JsonPointer(java.lang.String fullString, java.lang.String segment, int matchIndex, JsonPointer next)- Since:
- 2.5
-
-
Method Detail
-
compile
public static JsonPointer compile(java.lang.String input) throws java.lang.IllegalArgumentException
Factory method that parses given input and construct matching pointer instance, if it represents a valid JSON Pointer: if not, aIllegalArgumentExceptionis thrown.- Throws:
java.lang.IllegalArgumentException- Thrown if the input does not present a valid JSON Pointer expression: currently the only such expression is one that does NOT start with a slash ('/').
-
valueOf
public static JsonPointer valueOf(java.lang.String input)
Alias forcompile(java.lang.String); added to make instances automatically deserializable by Jackson databind.
-
forPath
public static JsonPointer forPath(JsonStreamContext context, boolean includeRoot)
Factory method that will construct a pointer instance that describes path to location givenJsonStreamContextpoints to.- Parameters:
context- Context to build pointer expression fotincludeRoot- Whether to include number offset for virtual "root context" or not.- Since:
- 2.9
-
matches
public boolean matches()
-
getMatchingProperty
public java.lang.String getMatchingProperty()
-
getMatchingIndex
public int getMatchingIndex()
-
mayMatchProperty
public boolean mayMatchProperty()
-
mayMatchElement
public boolean mayMatchElement()
-
last
public JsonPointer last()
Returns the leaf of current JSON Pointer expression. Leaf is the last non-null segment of current JSON Pointer.- Since:
- 2.5
-
append
public JsonPointer append(JsonPointer tail)
Mutant factory method that will return- `tail` if `this` instance is "empty" pointer, OR
- `this` instance if `tail` is "empty" pointer, OR
- Newly constructed
JsonPointerinstance that starts with all segments of `this`, followed by all segments of `tail`.
- Parameters:
tail-JsonPointerinstance to append to this one, to create a new pointer instance- Returns:
- Either `this` instance, `tail`, or a newly created combination, as per description above.
-
matchesProperty
public boolean matchesProperty(java.lang.String name)
Method that may be called to see if the pointer would match property (of a JSON Object) with given name.- Since:
- 2.5
-
matchProperty
public JsonPointer matchProperty(java.lang.String name)
-
matchesElement
public boolean matchesElement(int index)
Method that may be called to see if the pointer would match array element (of a JSON Array) with given index.- Since:
- 2.5
-
matchElement
public JsonPointer matchElement(int index)
- Since:
- 2.6
-
tail
public JsonPointer tail()
Accessor for getting a "sub-pointer", instance where current segment has been removed and pointer includes rest of segments. For matching state, will return null.
-
head
public JsonPointer head()
Accessor for getting a pointer instance that is identical to this instance except that the last segment has been dropped. For example, for JSON Point "/root/branch/leaf", this method would return pointer "/root/branch" (compared totail()that would return "/branch/leaf"). For leaf- Since:
- 2.5
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
equals
public boolean equals(java.lang.Object o)
- Overrides:
equalsin classjava.lang.Object
-
_parseTail
protected static JsonPointer _parseTail(java.lang.String input)
-
_parseQuotedTail
protected static JsonPointer _parseQuotedTail(java.lang.String input, int i)
Method called to parse tail of pointer path, when a potentially escaped character has been seen.- Parameters:
input- Full input for the tail being parsedi- Offset to character after tilde
-
_constructHead
protected JsonPointer _constructHead()
-
_constructHead
protected JsonPointer _constructHead(int suffixLength, JsonPointer last)
-
-