Browse Source

don't use `JsonProvider.getPropertyKeys(Object)` to query a list/array's indexes

pull/53/head
Jochen Berger 10 years ago
parent
commit
a4bf433d68
  1. 7
      json-path/src/main/java/com/jayway/jsonpath/internal/compiler/ScanPathToken.java
  2. 13
      json-path/src/main/java/com/jayway/jsonpath/internal/spi/json/AbstractJsonProvider.java
  3. 6
      json-path/src/main/java/com/jayway/jsonpath/spi/json/JsonProvider.java

7
json-path/src/main/java/com/jayway/jsonpath/internal/compiler/ScanPathToken.java

@ -197,8 +197,11 @@ public class ScanPathToken extends PathToken {
@Override @Override
public boolean matches(Object model) { public boolean matches(Object model) {
Collection<String> keys = ctx.jsonProvider().getPropertyKeys(model); if(ctx.jsonProvider().isMap(model)){
return keys.containsAll(propertyPathToken.getProperties()); Collection<String> keys = ctx.jsonProvider().getPropertyKeys(model);
return keys.containsAll(propertyPathToken.getProperties());
}
return false;
} }
} }
} }

13
json-path/src/main/java/com/jayway/jsonpath/internal/spi/json/AbstractJsonProvider.java

@ -96,20 +96,15 @@ public abstract class AbstractJsonProvider implements JsonProvider {
} }
/** /**
* Returns the keys from the given object or the indexes from an array * Returns the keys from the given object
* *
* @param obj an array or an object * @param obj an object
* @return the keys for an object or the indexes for an array * @return the keys for an object
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Collection<String> getPropertyKeys(Object obj) { public Collection<String> getPropertyKeys(Object obj) {
if (isArray(obj)) { if (isArray(obj)) {
List l = (List) obj; throw new UnsupportedOperationException();
List<String> keys = new ArrayList<String>(l.size());
for (int i = 0; i < l.size(); i++) {
keys.add(String.valueOf(i));
}
return keys;
} else { } else {
return ((Map) obj).keySet(); return ((Map) obj).keySet();
} }

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

@ -62,10 +62,10 @@ public interface JsonProvider {
/** /**
* Returns the keys from the given object or the indexes from an array * Returns the keys from the given object
* *
* @param obj an array or an object * @param obj an object
* @return the keys for an object or the indexes for an array * @return the keys for an object
*/ */
Collection<String> getPropertyKeys(Object obj); Collection<String> getPropertyKeys(Object obj);

Loading…
Cancel
Save