json-path/JsonPath · error · JsonPathException
length operation can not applied to null
Error message
length operation can not applied to null
What it means
JacksonJsonNodeJsonProvider.length throws JsonPathException when the target object is not a type that supports length() (Array, Map, Collection, TextNode). The message "length operation can not applied to null" (or a class name) means the JsonPath length() function was evaluated on an object that is null or of an unsupported node type (e.g. IntNode, BooleanNode).
Source
Thrown at json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java:225
while (iter.hasNext()){
keys.add(iter.next());
}
return keys;
}
@Override
public int length(Object obj) {
if (isArray(obj)) {
return toJsonArray(obj).size();
} else if (isMap(obj)) {
return toJsonObject(obj).size();
} else {
if (obj instanceof TextNode) {
TextNode element = (TextNode) obj;
return element.size();
}
}
throw new JsonPathException("length operation can not applied to " + (obj != null ? obj.getClass().getName()
: "null"));
}
@Override
public Iterable<?> toIterable(Object obj) {
ArrayNode arr = toJsonArray(obj);
Iterator<?> iterator = arr.iterator();
return new Iterable<Object>() {
@Override
public Iterator<Object> iterator() {
return new Iterator<Object>() {
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public Object next() {View on GitHub (pinned to 62a4c9f0f6)
Solutions
- Make the path definite (e.g. $.items[*]) or check the node for null/exists before applying length()
- Add a filter guard like ?(@.items != null) or use a default value so length() only runs on present arrays/strings
- Verify the JSON shape: if the value is a scalar number, compute length differently or fix the schema/producer
- Catch JsonPathException around the length evaluation and treat it as 'length undefined'
Example fix
// before Integer n = JsonPath.read(json, "$.maybeArray.length()"); // after List<Object> arr = JsonPath.read(json, "$.maybeArray"); Integer n = (arr == null) ? 0 : arr.size();
Defensive patterns
Strategy: validation
Validate before calling
Object node = JsonPath.read(json, "$.items");
boolean lengthApplies = node != null
&& (node instanceof List || node instanceof Map || node instanceof String || node instanceof TextNode);
if (!lengthApplies) throw new IllegalStateException("length() not applicable to: " + node); Type guard
static boolean supportsLength(Object o) {
return o != null && (o instanceof List || o instanceof Map
|| o instanceof Collection || o instanceof CharSequence
|| o instanceof com.fasterxml.jackson.databind.node.TextNode);
} Try / catch
try {
int n = JsonPath.read(json, "$.items.length()");
} catch (JsonPathException e) {
if (e.getMessage() != null && e.getMessage().startsWith("length operation can not applied")) {
n = 0; // treat undefined length as empty
} else throw e;
} Prevention
- Check the path resolves to a non-null array/map/string before length()
- Use filters like ?(@.items != null) for optional fields
- Validate document shape against a JSON schema for heterogeneous producers
- Prefer reading the array and calling .size() yourself over length() on uncertain paths
When it happens
Trigger: Evaluating a filter or length() function such as $.items.length() where the path resolves to null (missing property), a numeric/boolean/object node, or a non-TextNode scalar instead of an array/map/string/collection.
Common situations: Optional JSON fields missing in some documents so the path yields null; expecting a string but receiving a number node; calling length() on an object node instead of an array; defensive length checks in filters over heterogeneous documents.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- length operation cannot be applied to
- length operation can not applied to
- length operation can not applied to null
- length operation can not applied to null
- Put can not be performed to multiple properties
AI-assisted analysis of json-path/JsonPath@62a4c9f0f6 (2026-09-11).
Data as JSON: /api/errors/72bde993a64a74bd.
Report an issue: GitHub.