diff --git a/README.md b/README.md
index 9a21e885..0c1b32a6 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@ Jayway JsonPath
[](https://maven-badges.herokuapp.com/maven-central/com.jayway.jsonpath/json-path)
[](http://www.javadoc.io/doc/com.jayway.jsonpath/json-path)
-Jayway JsonPath is a Java port of [Stefan Goessner JsonPath implementation](http://goessner.net/articles/JsonPath/).
+Jayway JsonPath is a Java port of [Stefan Goessner JsonPath implementation](http://goessner.net/articles/JsonPath/).
Getting Started
---------------
@@ -15,17 +15,19 @@ Getting Started
JsonPath is available at the Central Maven Repository. Maven users add this to your POM.
```xml
+
com.jayway.jsonpathjson-path
- 2.9.0
+ 2.10.0
```
-If you need help ask questions at [Stack Overflow](http://stackoverflow.com/questions/tagged/jsonpath). Tag the question 'jsonpath' and 'java'.
+If you need help ask questions at [Stack Overflow](http://stackoverflow.com/questions/tagged/jsonpath). Tag the
+question 'jsonpath' and 'java'.
-JsonPath expressions always refer to a JSON structure in the same way as XPath expression are used in combination
-with an XML document. The "root member object" in JsonPath is always referred to as `$` regardless if it is an
+JsonPath expressions always refer to a JSON structure in the same way as XPath expression are used in combination
+with an XML document. The "root member object" in JsonPath is always referred to as `$` regardless if it is an
object or array.
JsonPath expressions can use the dot–notation
@@ -39,18 +41,17 @@ or the bracket–notation
Operators
---------
-| Operator | Description |
-| :------------------------ | :----------------------------------------------------------------- |
-| `$` | The root element to query. This starts all path expressions. |
-| `@` | The current node being processed by a filter predicate. |
-| `*` | Wildcard. Available anywhere a name or numeric are required. |
-| `..` | Deep scan. Available anywhere a name is required. |
-| `.` | Dot-notated child |
-| `['' (, '')]` | Bracket-notated child or children |
-| `[ (, )]` | Array index or indexes |
-| `[start:end]` | Array slice operator |
-| `[?()]` | Filter expression. Expression must evaluate to a boolean value. |
-
+| Operator | Description |
+|:--------------------------|:----------------------------------------------------------------|
+| `$` | The root element to query. This starts all path expressions. |
+| `@` | The current node being processed by a filter predicate. |
+| `*` | Wildcard. Available anywhere a name or numeric are required. |
+| `..` | Deep scan. Available anywhere a name is required. |
+| `.` | Dot-notated child |
+| `['' (, '')]` | Bracket-notated child or children |
+| `[ (, )]` | Array index or indexes |
+| `[start:end]` | Array slice operator |
+| `[?()]` | Filter expression. Expression must evaluate to a boolean value. |
Functions
---------
@@ -76,25 +77,26 @@ The function output is dictated by the function itself.
Filter Operators
-----------------
-Filters are logical expressions used to filter arrays. A typical filter would be `[?(@.age > 18)]` where `@` represents the current item being processed. More complex filters can be created with logical operators `&&` and `||`. String literals must be enclosed by single or double quotes (`[?(@.color == 'blue')]` or `[?(@.color == "blue")]`).
-
-| Operator | Description |
-| :----------------------- | :-------------------------------------------------------------------- |
-| `==` | left is equal to right (note that 1 is not equal to '1') |
-| `!=` | left is not equal to right |
-| `<` | left is less than right |
-| `<=` | left is less or equal to right |
-| `>` | left is greater than right |
-| `>=` | left is greater than or equal to right |
-| `=~` | left matches regular expression [?(@.name =~ /foo.*?/i)] |
-| `in` | left exists in right [?(@.size in ['S', 'M'])] |
-| `nin` | left does not exists in right |
-| `subsetof` | left is a subset of right [?(@.sizes subsetof ['S', 'M', 'L'])] |
-| `anyof` | left has an intersection with right [?(@.sizes anyof ['M', 'L'])] |
-| `noneof` | left has no intersection with right [?(@.sizes noneof ['M', 'L'])] |
-| `size` | size of left (array or string) should match right |
-| `empty` | left (array or string) should be empty |
-
+Filters are logical expressions used to filter arrays. A typical filter would be `[?(@.age > 18)]` where `@` represents
+the current item being processed. More complex filters can be created with logical operators `&&` and `||`. String
+literals must be enclosed by single or double quotes (`[?(@.color == 'blue')]` or `[?(@.color == "blue")]`).
+
+| Operator | Description |
+|:-----------|:-------------------------------------------------------------------|
+| `==` | left is equal to right (note that 1 is not equal to '1') |
+| `!=` | left is not equal to right |
+| `<` | left is less than right |
+| `<=` | left is less or equal to right |
+| `>` | left is greater than right |
+| `>=` | left is greater than or equal to right |
+| `=~` | left matches regular expression [?(@.name =~ /foo.*?/i)] |
+| `in` | left exists in right [?(@.size in ['S', 'M'])] |
+| `nin` | left does not exists in right |
+| `subsetof` | left is a subset of right [?(@.sizes subsetof ['S', 'M', 'L'])] |
+| `anyof` | left has an intersection with right [?(@.sizes anyof ['M', 'L'])] |
+| `noneof` | left has no intersection with right [?(@.sizes noneof ['M', 'L'])] |
+| `size` | size of left (array or string) should match right |
+| `empty` | left (array or string) should be empty |
Path Examples
-------------
@@ -141,25 +143,25 @@ Given the json
}
```
-| JsonPath | Result |
-|:-------------------------------------------------------------------| :----- |
-| `$.store.book[*].author` | The authors of all books |
-| `$..author` | All authors |
-| `$.store.*` | All things, both books and bicycles |
-| `$.store..price` | The price of everything |
-| `$..book[2]` | The third book |
-| `$..book[-2]` | The second to last book |
-| `$..book[0,1]` | The first two books |
-| `$..book[:2]` | All books from index 0 (inclusive) until index 2 (exclusive) |
-| `$..book[1:2]` | All books from index 1 (inclusive) until index 2 (exclusive) |
-| `$..book[-2:]` | Last two books |
-| `$..book[2:]` | All books from index 2 (inclusive) to last |
-| `$..book[?(@.isbn)]` | All books with an ISBN number |
-| `$.store.book[?(@.price < 10)]` | All books in store cheaper than 10 |
-| `$..book[?(@.price <= $['expensive'])]` | All books in store that are not "expensive" |
-| `$..book[?(@.author =~ /.*REES/i)]` | All books matching regex (ignore case) |
-| `$..*` | Give me every thing
-| `$..book.length()` | The number of books |
+| JsonPath | Result |
+|:----------------------------------------|:-------------------------------------------------------------|
+| `$.store.book[*].author` | The authors of all books |
+| `$..author` | All authors |
+| `$.store.*` | All things, both books and bicycles |
+| `$.store..price` | The price of everything |
+| `$..book[2]` | The third book |
+| `$..book[-2]` | The second to last book |
+| `$..book[0,1]` | The first two books |
+| `$..book[:2]` | All books from index 0 (inclusive) until index 2 (exclusive) |
+| `$..book[1:2]` | All books from index 1 (inclusive) until index 2 (exclusive) |
+| `$..book[-2:]` | Last two books |
+| `$..book[2:]` | All books from index 2 (inclusive) to last |
+| `$..book[?(@.isbn)]` | All books with an ISBN number |
+| `$.store.book[?(@.price < 10)]` | All books in store cheaper than 10 |
+| `$..book[?(@.price <= $['expensive'])]` | All books in store that are not "expensive" |
+| `$..book[?(@.author =~ /.*REES/i)]` | All books matching regex (ignore case) |
+| `$..*` | Give me every thing
+| `$..book.length()` | The number of books |
Reading a Document
------------------
@@ -171,8 +173,8 @@ String json = "...";
List authors = JsonPath.read(json, "$.store.book[*].author");
```
-If you only want to read once this is OK. In case you need to read an other path as well this is not the way
-to go since the document will be parsed every time you call JsonPath.read(...). To avoid the problem you can
+If you only want to read once this is OK. In case you need to read an other path as well this is not the way
+to go since the document will be parsed every time you call JsonPath.read(...). To avoid the problem you can
parse the json first.
```java
@@ -182,6 +184,7 @@ Object document = Configuration.defaultConfiguration().jsonProvider().parse(json
String author0 = JsonPath.read(document, "$.store.book[0].author");
String author1 = JsonPath.read(document, "$.store.book[1].author");
```
+
JsonPath also provides a fluent API. This is also the most flexible one.
```java
@@ -193,14 +196,14 @@ List authorsOfBooksWithISBN = ctx.read("$.store.book[?(@.isbn)].author")
List