{"record":{"id":"f2e84cea2402333c","repo":"json-path/JsonPath","slug":"not-a-json-node-f2e84c","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/JacksonJsonNodeJsonProvider.java","lineNumber":80,"sourceCode":"            return objectMapper.readTree(json);\n        } catch (IOException 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":62,"sourceCodeEnd":98,"githubUrl":"https://github.com/json-path/JsonPath/blob/62a4c9f0f65ba3f625aa0867d64c528ba72d09ec/json-path/src/main/java/com/jayway/jsonpath/spi/json/JacksonJsonNodeJsonProvider.java#L62-L98","documentation":"JacksonJsonNodeJsonProvider.toJson throws JsonPathException(\"Not a JSON Node\") when the object passed for serialization is not a Jackson JsonNode instance. This provider can only serialize tree-model values; unlike JacksonJsonProvider it does not serialize arbitrary POJOs.","triggerScenarios":"Calling toJson(obj) (or JsonPath.toJson / operations that serialize mapped results) with a Map, List, POJO, or parsed value obtained from a different provider (e.g. JacksonJsonProvider or GsonJsonProvider) while Configuration uses JacksonJsonNodeJsonProvider.","commonSituations":"Mixing providers: parsing with the default provider but serializing via the JsonNode provider; upgrading code from JacksonJsonProvider to JacksonJsonNodeJsonProvider and assuming toJson accepts POJOs; passing DocumentContext results (Maps/Lists) to this provider's toJson.","solutions":["Ensure the object is a com.fasterxml.jackson.databind.JsonNode; convert Maps/Lists with objectMapper.valueToTree(obj) first","Use JacksonJsonProvider instead if you need POJO serialization","Make provider selection and usage consistent in a single Configuration object shared across parse/read/toJson calls","Add an instanceof check in your own code before calling toJson"],"exampleFix":"// before\nString json = nodeProvider.toJson(myMap);\n// after\nJsonNode node = objectMapper.valueToTree(myMap);\nString json = nodeProvider.toJson(node);","handlingStrategy":"type-guard","validationCode":"if (!(obj instanceof JsonNode)) {\n    obj = objectMapper.valueToTree(obj); // convert before calling toJson\n}","typeGuard":"static boolean isJsonNode(Object o) {\n    return o instanceof com.fasterxml.jackson.databind.JsonNode;\n}","tryCatchPattern":"try {\n    String json = nodeProvider.toJson(obj);\n} catch (JsonPathException e) {\n    if (e.getMessage().contains(\"Not a JSON Node\")) {\n        json = nodeProvider.toJson(objectMapper.valueToTree(obj));\n    } else throw e;\n}","preventionTips":["Use one consistent Configuration/provider for parse and toJson calls","Convert POJOs/Maps with objectMapper.valueToTree before using the JsonNode provider","Choose JacksonJsonProvider if you need POJO serialization instead","Add instanceof assertions in wrapper utilities around toJson"],"tags":["jackson","json-path","type-mismatch","serialization"],"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"}