Jsonpath with Jackson or Gson

The Jayway JsonPath library has support for reading values using a JSON path.

For example:

String json = "...";

Map<String, Object> book = JsonPath.read(json, "$.store.book[0]");
System.out.println(book);  // prints {category=reference, author=Nigel Rees, title=Sayings of the Century, price=8.95}

Double price = JsonPath.read(json, "$.store.bicycle.price");
System.out.println(price);  // prints 19.95

You can also map JSON objects directly to classes, like in GSON or Jackson:

Book book = JsonPath.parse(json).read("$.store.book[0]", Book.class);
System.out.println(book);  // prints Book{category='reference', author="Nigel Rees", title="Sayings of the Century", price=8.95}

If you would like to specifically use GSON or Jackson to do the deserialization (the default is to use json-smart), you can also configure this:

Configuration.setDefaults(new Configuration.Defaults() {
    private final JsonProvider jsonProvider = new JacksonJsonProvider();
    private final MappingProvider mappingProvider = new JacksonMappingProvider();

    @Override
    public JsonProvider jsonProvider() {
        return jsonProvider;
    }

    @Override
    public MappingProvider mappingProvider() {
        return mappingProvider;
    }

    @Override
    public Set<Option> options() {
        return EnumSet.noneOf(Option.class);
    }
});

See the documentation for more details.

Leave a Comment