{"record":{"id":"746a7b8867896c85","repo":"json-path/JsonPath","slug":"not-a-json-node","errorCode":null,"errorMessage":"Not a JSON Node","messagePattern":"Not a JSON Node","errorType":"exception","errorClass":"JsonPathException","httpStatus":null,"severity":"error","filePath":"json-path/src/main/java/com/jayway/jsonpath/spi/json/Jackson3JsonNodeJsonProvider.java","lineNumber":79,"sourceCode":"            return objectMapper.readTree(json);\n        } catch (JacksonException e) {\n            throw new InvalidJsonException(e, new String(json, StandardCharsets.UTF_8));\n        }\n    }\n\n    @Override\n    public Object parse(InputStream jsonStream, String charset) throws InvalidJsonException {\n        try {\n            return objectMapper.readTree(new InputStreamReader(jsonStream, charset));\n        } catch (IOException e) {\n            throw new InvalidJsonException(e);\n        }\n    }\n\n    @Override\n    public String toJson(Object obj) {\n        if (!(obj instanceof JsonNode)) {\n            throw new JsonPathException(\"Not a JSON Node\");\n        }\n        return obj.toString();\n    }\n\n    @Override\n    public Object createArray() {\n        return JsonNodeFactory.instance.arrayNode();\n    }\n\n    @Override\n    public Object createMap() {\n        return JsonNodeFactory.instance.objectNode();\n    }\n\n    public Object unwrap(Object o) {\n        if (o == null) {\n            return null;\n        }","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/json-path/JsonPath/blob/62a4c9f0f65ba3f625aa0867d64c528ba72d09ec/json-path/src/main/java/com/jayway/jsonpath/spi/json/Jackson3JsonNodeJsonProvider.java#L61-L97","documentation":"Jackson3JsonNodeJsonProvider.toJson serializes a tree node back to a JSON string and requires the argument to be a Jackson JsonNode. Passing any other object type (raw Maps, Lists, provider-internal wrappers) violates the provider's model contract, so JsonPathException('Not a JSON Node') is thrown.","triggerScenarios":"Calling toJson(obj) on an object that is not com.fasterxml.jackson.../tools.jackson JsonNode — e.g. a Map returned by another provider, or the unwrapped POJO result of a read; mixing providers (parsing with Jackson3JsonProvider but serializing via the JsonNode provider or vice versa); passing user-created data structures directly to the provider.","commonSituations":"Code that pipes results from one JsonPath configuration into a provider expecting its own node type; migrations between Jackson databind provider and JsonNode provider where object models differ; generic utility code assuming all providers use Maps.","solutions":["Only pass JsonNode instances to toJson; re-parse raw objects with this provider first (toJsonNode/mapToNode)","Use the matching provider for the object model you hold (Jackson3JsonProvider.toJson for parsed Object trees)","Convert the value: ObjectMapper.valueToTree(obj) to obtain a JsonNode before calling toJson","Standardize on one JsonProvider for both parse and serialize in your Configuration"],"exampleFix":"// before\nString s = nodeProvider.toJson(myMap); // JsonPathException\n// after\nJsonNode node = objectMapper.valueToTree(myMap);\nString s = nodeProvider.toJson(node);","handlingStrategy":"type-guard","validationCode":"if (!(obj instanceof JsonNode)) throw new IllegalArgumentException(\"toJson requires a JsonNode, got: \" + obj.getClass());","typeGuard":"boolean isJsonNode(Object o) { return o instanceof JsonNode; }","tryCatchPattern":"try {\n    return provider.toJson(obj);\n} catch (JsonPathException e) {\n    return objectMapper.valueToTree(obj).toString();\n}","preventionTips":["Keep one JsonProvider per Configuration for parse and serialize","Convert foreign objects with objectMapper.valueToTree before node-provider calls","Never pass raw Maps/Lists to JsonNode-based providers","Document which object model each provider expects"],"tags":["json-path","jackson","type-mismatch"],"backgroundTag":"type-mismatch","analyzedSha":"62a4c9f0f65ba3f625aa0867d64c528ba72d09ec","analyzedAt":"2026-09-11T11:36:00.448Z","contentChangedAt":"2026-09-11T11:36:00.448Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}