Browse Source

Add keys function for Map objects

See https://github.com/json-path/JsonPath/issues/439
pull/440/head
sergey 6 years ago
parent
commit
7355e30ee7
  1. 2
      json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunctionFactory.java
  2. 23
      json-path/src/main/java/com/jayway/jsonpath/internal/function/json/KeySetFunction.java
  3. 24
      json-path/src/test/java/com/jayway/jsonpath/internal/function/KeySetFunctionTest.java
  4. 6
      json-path/src/test/resources/keyset.json

2
json-path/src/main/java/com/jayway/jsonpath/internal/function/PathFunctionFactory.java

@ -2,6 +2,7 @@ package com.jayway.jsonpath.internal.function;
import com.jayway.jsonpath.InvalidPathException;
import com.jayway.jsonpath.internal.function.json.Append;
import com.jayway.jsonpath.internal.function.json.KeySetFunction;
import com.jayway.jsonpath.internal.function.numeric.Average;
import com.jayway.jsonpath.internal.function.numeric.Max;
import com.jayway.jsonpath.internal.function.numeric.Min;
@ -44,6 +45,7 @@ public class PathFunctionFactory {
map.put("length", Length.class);
map.put("size", Length.class);
map.put("append", Append.class);
map.put("keys", KeySetFunction.class);
FUNCTIONS = Collections.unmodifiableMap(map);

23
json-path/src/main/java/com/jayway/jsonpath/internal/function/json/KeySetFunction.java

@ -0,0 +1,23 @@
package com.jayway.jsonpath.internal.function.json;
import com.jayway.jsonpath.internal.EvaluationContext;
import com.jayway.jsonpath.internal.PathRef;
import com.jayway.jsonpath.internal.function.Parameter;
import com.jayway.jsonpath.internal.function.PathFunction;
import java.util.List;
/**
* Author: Sergey Saiyan sergey.sova42@gmail.com
* Created at 21/02/2018.
*/
public class KeySetFunction implements PathFunction {
@Override
public Object invoke(String currentPath, PathRef parent, Object model, EvaluationContext ctx, List<Parameter> parameters) {
if (ctx.configuration().jsonProvider().isMap(model)) {
return ctx.configuration().jsonProvider().getPropertyKeys(model);
}
return null;
}
}

24
json-path/src/test/java/com/jayway/jsonpath/internal/function/KeySetFunctionTest.java

@ -0,0 +1,24 @@
package com.jayway.jsonpath.internal.function;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.Configurations;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import java.util.Arrays;
import java.util.HashSet;
/**
* Author: Sergey Saiyan sergey.sova42@gmail.com
* Created at 21/02/2018.
*/
public class KeySetFunctionTest extends BaseFunctionTest {
private Configuration conf = Configurations.JACKSON_CONFIGURATION;
@Test
public void testKeySet() throws Exception {
String json = IOUtils.toString(getClass().getResourceAsStream("/keyset.json"));
verifyFunction(conf, "$.data.keys()", json, new HashSet<String>(Arrays.asList("a", "b")));
}
}

6
json-path/src/test/resources/keyset.json

@ -0,0 +1,6 @@
{
"data" : {
"a" : "a",
"b" : "b"
}
}
Loading…
Cancel
Save