Browse Source

Merge branch 'master' into fix-jackson-pojo

pull/370/head
kallestenflo 8 years ago committed by GitHub
parent
commit
4fece409fe
  1. 2
      README.md
  2. 9
      json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java
  3. 6
      json-path/src/main/java/com/jayway/jsonpath/spi/mapper/GsonMappingProvider.java
  4. 21
      json-path/src/test/java/com/jayway/jsonpath/GsonJsonProviderTest.java
  5. 27
      json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java

2
README.md

@ -3,7 +3,7 @@ Jayway JsonPath
**A Java DSL for reading JSON documents.**
[![Build Status](https://travis-ci.org/jayway/JsonPath.svg?branch=master)](https://travis-ci.org/jayway/JsonPath)
[![Build Status](https://travis-ci.org/json-path/JsonPath.svg?branch=master)](https://travis-ci.org/json-path/JsonPath)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.jayway.jsonpath/json-path/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.jayway.jsonpath/json-path)
[![Javadoc](https://javadoc-emblem.rhcloud.com/doc/com.jayway.jsonpath/json-path/badge.svg)](http://www.javadoc.io/doc/com.jayway.jsonpath/json-path)

9
json-path/src/main/java/com/jayway/jsonpath/internal/filter/ValueNode.java

@ -359,20 +359,19 @@ public abstract class ValueNode {
}
public boolean isArray(Predicate.PredicateContext ctx) {
return parse(ctx) instanceof List;
return ctx.configuration().jsonProvider().isArray(parse(ctx));
}
public boolean isMap(Predicate.PredicateContext ctx) {
return parse(ctx) instanceof Map;
return ctx.configuration().jsonProvider().isMap(parse(ctx));
}
public int length(Predicate.PredicateContext ctx) {
return isArray(ctx) ? ((List) parse(ctx)).size() : -1;
return isArray(ctx) ? ctx.configuration().jsonProvider().length(parse(ctx)) : -1;
}
public boolean isEmpty(Predicate.PredicateContext ctx) {
if (isArray(ctx)) return ((List) parse(ctx)).size() == 0;
else if (isMap(ctx)) return ((Map) parse(ctx)).size() == 0;
if (isArray(ctx) || isMap(ctx)) return ctx.configuration().jsonProvider().length(parse(ctx)) == 0;
else if((parse(ctx) instanceof String)) return ((String)parse(ctx)).length() == 0;
return true;
}

6
json-path/src/main/java/com/jayway/jsonpath/spi/mapper/GsonMappingProvider.java

@ -62,6 +62,9 @@ public class GsonMappingProvider implements MappingProvider {
@Override
public <T> T map(Object source, Class<T> targetType, Configuration configuration) {
if(source == null){
return null;
}
try {
return factory.call().getAdapter(targetType).fromJsonTree((JsonElement) source);
} catch (Exception e){
@ -71,6 +74,9 @@ public class GsonMappingProvider implements MappingProvider {
@Override
public <T> T map(Object source, TypeRef<T> targetType, Configuration configuration) {
if(source == null){
return null;
}
try {
return (T) factory.call().getAdapter(TypeToken.get(targetType.getType())).fromJsonTree((JsonElement) source);
} catch (Exception e){

21
json-path/src/test/java/com/jayway/jsonpath/GsonJsonProviderTest.java

@ -3,6 +3,8 @@ package com.jayway.jsonpath;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.jayway.jsonpath.spi.json.GsonJsonProvider;
import com.jayway.jsonpath.spi.mapper.GsonMappingProvider;
import com.jayway.jsonpath.spi.mapper.MappingException;
import org.junit.Test;
@ -181,6 +183,25 @@ public class GsonJsonProviderTest extends BaseTest {
using(GSON_CONFIGURATION).parse(JSON).read("$", typeRef);
}
@Test
// https://github.com/json-path/JsonPath/issues/351
public void no_error_when_mapping_null() throws IOException {
Configuration configuration = Configuration
.builder()
.mappingProvider(new GsonMappingProvider())
.jsonProvider(new GsonJsonProvider())
.options(Option.DEFAULT_PATH_LEAF_TO_NULL, Option.SUPPRESS_EXCEPTIONS)
.build();
String json = "{\"M\":[]}";
String result = JsonPath.using(configuration).parse(json).read("$.M[0].A[0]", String.class);
assertThat(result).isNull();
}
public static class FooBarBaz<T> {
public T gen;

27
json-path/src/test/java/com/jayway/jsonpath/JacksonJsonNodeJsonProviderTest.java

@ -122,6 +122,33 @@ public class JacksonJsonNodeJsonProviderTest extends BaseTest {
String id = context.read("$.data.id", String.class);
assertThat(id).isEqualTo(uuid.toString());
}
// https://github.com/json-path/JsonPath/issues/366
public void empty_array_check_works() throws IOException {
String json = "[" +
" {" +
" \"name\": \"a\"," +
" \"groups\": [{" +
" \"type\": \"phase\"," +
" \"name\": \"alpha\"" +
" }, {" +
" \"type\": \"not_phase\"," +
" \"name\": \"beta\"" +
" }]" +
" }, {" +
" \"name\": \"b\"," +
" \"groups\": [{" +
" \"type\": \"phase\"," +
" \"name\": \"beta\"" +
" }, {" +
" \"type\": \"not_phase\"," +
" \"name\": \"alpha\"" +
" }]" +
" }" +
"]";
ArrayNode node = using(JACKSON_JSON_NODE_CONFIGURATION).parse(json).read("$[?(@.groups[?(@.type == 'phase' && @.name == 'alpha')] empty false)]");
assertThat(node.size()).isEqualTo(1);
assertThat(node.get(0).get("name").asText()).isEqualTo("a");
}
public static class FooBarBaz<T> {
public T gen;

Loading…
Cancel
Save