- All Implemented Interfaces:
Comparable<JsPath>
Position
.
There are two different ways to create a JsPath:
1. From a path-like string using the static factory method path(String)
. The path
follows the JSON Pointer specification RFC 6901.
To use paths for putting data in a JSON, keys with names that are numbers must be single-quoted.
For example: a={"0": true} b=[false]
According to RFC 6901, the pointer /0 points to true in 'a', and to false in 'b'. In json-values, it's slightly different: /0 points to false in 'b', and /'0' points to true in 'a'.
It's necessary to make that distinction because otherwise, there are scenarios when there is no way to know if the user wants to insert an array or an object.
2. By using the API, you can use the methods fromKey(String)
and fromIndex(int)
to create a JsPath and then the methods index(int)
and key(String)
to
append keys or indexes.
For example: JsPath a = JsPath.fromKey("a").index(0).key("b"); // Creates /a/0/b JsPath b = JsPath.fromIndex(0).key("a").index(0); // Creates /0/a/0
Example JSON object:
{ "a": { "x": [ { "c": [1, 2, { "": { "1": true, " ": false, "'": 4 } }] } ] }, "1": null, "": "" }
The paths are as follows:
/ = "" // an empty string is a valid name for a key /'1' = null // numeric keys have to be single-quoted /a/x/0/c/0 = 1 /a/x/0/c/1 = 2 /a/x/0/c/2//'1' = true // single quotes are only mandatory when the key is a number #/a/x/0/c/2//+" = false // + is URL-decoded to a white-space #/a/x/0/c/2//%27" = 4 // %27 is URL-decoded to '
According to the API: fromKey("") = "" fromKey("1") = null fromKey("a").key("x").index(0).key("c").index(0) = 1 fromKey("a").key("x").index(0).key("c").index(1) = 2 fromKey("a").key("x").index(0).key("c").index(2).key("").key("1") = true fromKey("a").key("x").index(0).key("c").index(2).key("").key(" ") = false fromKey("a").key("x").index(0).key("c").index(2).key("").key("'") = 4
-
Method Summary
Modifier and TypeMethodDescriptionCreates a new JsPath appending the given path to this path.int
Compares this path with another given as a parameter by comparing in order each of their positions, one by one, until a result different from zero is returned or all the positions of any path are consumed.boolean
returns true if this path contains the given pathboolean
containsKey
(String name) returns true if this path contains the given keydec()
Returns a new path decrementing the last index by one, throwing an UserError if the last Position is not an indexstatic JsPath
empty()
Returns the singleton empty path.boolean
returns true if this path ends with the given path.boolean
endsWithKey
(String key) boolean
Indicates whether some other object is "equal to" this pathstatic JsPath
fromIndex
(int i) Creates a new path from an index.static JsPath
Creates a new path from a key.int
hashCode()
Returns the hashcode of this pathhead()
Returns the head of this path if it's not empty, throwing an exception otherwise.inc()
Returns a new path incrementing the last index by one, throwing an UserError if the last Position is not an indexindex
(int i) Returns a new path appending an index with the given value to the back of this path.init()
Returns a new path without the last Position of this path.boolean
isEmpty()
Returns true if the path is empty.Appends a key to the path.last()
returns the last positionthis
JsPath if it's not empty or an exception otherwise.mapKeys
(UnaryOperator<String> map) Creates a new JsPath applying the given map function to every key of this path.static JsPath
Parses a path from a string following RFC 6901.Creates a new JsPath prepending the given path to this path.int
size()
Returns the number of Position (keys and indexes) ofthis
JsPathboolean
startsWith
(JsPath path) returns true if this path starts with the given path.boolean
startsWithKey
(String key) stream()
Returns a sequentialStream
of Positions with this path as its source.tail()
Returns a JsPath without the head of this JsPathtoString()
Returns a string representation of this path following the format defined in the RFC 6901 with the exception that keys which names are numbers are single-quoted.
-
Method Details
-
empty
Returns the singleton empty path.- Returns:
- the singleton empty path
-
fromIndex
Creates a new path from an index.- Parameters:
i
- the index- Returns:
- a new JsPath
-
path
Parses a path from a string following RFC 6901.- Parameters:
path
- the given path string- Returns:
- a new JsPath
-
fromKey
Creates a new path from a key.- Parameters:
key
- the name of the key- Returns:
- a new JsPath
-
key
Appends a key to the path.- Parameters:
key
- the key name to be appended- Returns:
- a new JsPath with the key appended
-
compareTo
Compares this path with another given as a parameter by comparing in order each of their positions, one by one, until a result different from zero is returned or all the positions of any path are consumed.- Specified by:
compareTo
in interfaceComparable<JsPath>
- Parameters:
that
- the given path- Returns:
- 1 if this is greater than that, -1 if this is lower than that, 0 otherwise
- See Also:
-
head
Returns the head of this path if it's not empty, throwing an exception otherwise.- Returns:
- the head of the path witch is an object of type Position representing and Index or a Key
- Throws:
UserError
- if the path is empty
-
stream
Returns a sequentialStream
of Positions with this path as its source.- Returns:
- stream of Positions of this path
-
inc
Returns a new path incrementing the last index by one, throwing an UserError if the last Position is not an index- Returns:
- a new JsPath with the last index incremented by one
- Throws:
UserError
- if the last position is not an Index
-
last
returns the last positionthis
JsPath if it's not empty or an exception otherwise.- Returns:
- the last position the JsPath witch is an object of type Position representing and Index or a Key
- Throws:
UserError
- if the JsPath is empty
-
index
Returns a new path appending an index with the given value to the back of this path.- Parameters:
i
- the value of the index to be appended- Returns:
- a new JsPath with the Index appended to the back
-
init
Returns a new path without the last Position of this path.- Returns:
- a new JsPath without the last Position of this JsPath
- Throws:
UserError
- if the JsPath is empty
-
isEmpty
public boolean isEmpty()Returns true if the path is empty. An empty path represents the empty key- Returns:
- true if this path is empty, false otherwise
-
dec
Returns a new path decrementing the last index by one, throwing an UserError if the last Position is not an index- Returns:
- a new JsPath with the last index decremented by one
- Throws:
UserError
- if the last position is not an Index
-
size
public int size()Returns the number of Position (keys and indexes) ofthis
JsPath- Returns:
- the number of Position (keys and indexes) of
this
JsPath
-
tail
Returns a JsPath without the head of this JsPath- Returns:
- a JsPath without the head of this JsPath
- Throws:
UserError
- if the JsPath is empty
-
mapKeys
Creates a new JsPath applying the given map function to every key of this path.- Parameters:
map
- the given map function- Returns:
- a new JsPath with all its Keys mapped with the given function
-
append
Creates a new JsPath appending the given path to this path.- Parameters:
path
- the given JsPath to be appended- Returns:
- a new JsPath with the given JsPath appended to
this
JsPath
-
prepend
Creates a new JsPath prepending the given path to this path.- Parameters:
path
- the given path to be prepended- Returns:
- a new JsPath with the given JsPath prepended to
this
JsPath
-
startsWith
returns true if this path starts with the given path. If the given path is JsPath.empty(), it always returns true- Parameters:
path
- the given path- Returns:
- true if this JsPath starts with the given JsPath
-
startsWithKey
-
endsWithKey
-
endsWith
returns true if this path ends with the given path. If the given path is JsPath.empty(), it always returns true- Parameters:
path
- the given path- Returns:
- true if this JsPath ends with the given JsPath
-
hashCode
public int hashCode()Returns the hashcode of this path -
equals
Indicates whether some other object is "equal to" this path -
toString
Returns a string representation of this path following the format defined in the RFC 6901 with the exception that keys which names are numbers are single-quoted. Example: /a/b/0/'1'/ -
containsKey
returns true if this path contains the given key- Parameters:
name
- the name of the key- Returns:
- true if this path contains the key
-
contains
returns true if this path contains the given path- Parameters:
path
- the path- Returns:
- true if this path contains the given path
-