diff --git a/README.md b/README.md index 0c1b32a6e..28ff3e53e 100644 --- a/README.md +++ b/README.md @@ -514,4 +514,27 @@ CacheProvider.setCache(new Cache() { }); ``` +### Path Function Provider SPI + +This SPI allows adding, overriding, and removing the path functions available in the JsonPath path. +Therefore, change the `PathFunctionProvider` of the `Configuration`. + +```java +String json = "..."; + +Configuration conf = Configuration.defaultConfiguration().pathFunctionProvider(new DefaultPathFunctionProvider() { + @Override + public PathFunction newFunction(String name) throws InvalidPathException { + if (name.equals("toUpperCase")) { + return (currentPath, parent, model, ctx, parameters) -> ((String) model).toUpperCase(); + } + + // Fall back to default functions + return super.newFunction(name); + } +}); + +JsonPath.using(conf).parse(json).read("$.store.book[0].author.toUpperCase()").toString(); // NIGEL REES +``` + [![Analytics](https://ga-beacon.appspot.com/UA-54945131-1/jsonpath/index)](https://github.com/igrigorik/ga-beacon) diff --git a/json-path/src/main/java/com/jayway/jsonpath/Configuration.java b/json-path/src/main/java/com/jayway/jsonpath/Configuration.java index 69427e1f0..949c9c03f 100644 --- a/json-path/src/main/java/com/jayway/jsonpath/Configuration.java +++ b/json-path/src/main/java/com/jayway/jsonpath/Configuration.java @@ -15,8 +15,11 @@ package com.jayway.jsonpath; import com.jayway.jsonpath.internal.DefaultsImpl; +import com.jayway.jsonpath.spi.pathFunction.DefaultPathFunctionProvider; +import com.jayway.jsonpath.spi.pathFunction.PathFunction; import com.jayway.jsonpath.spi.json.JsonProvider; import com.jayway.jsonpath.spi.mapper.MappingProvider; +import com.jayway.jsonpath.spi.pathFunction.PathFunctionProvider; import java.util.*; @@ -50,16 +53,19 @@ private static Defaults getEffectiveDefaults(){ private final MappingProvider mappingProvider; private final Set