Skip to content

Jackson 3 parses YAML ~ as StringNode instead of NullNode #661

Description

@neottil

In Jackson 2, the special character ~ was parsed as a NullNode, while in Jackson 3 I get a StringNode with value ~. It seems that the default behavior has changed.

I tried several YAML mapper configurations, but I couldn’t find any setting that reproduces the Jackson 2 behavior.

The issue can be reproduced with the following test:

@Test
void tilde() throws JsonProcessingException {
    String rawDescriptor = """
         specVersion: v1
         kind: com.example.kind
         name: "mnp_up"
         state: ~
         description: "a description"
        """;

    tools.jackson.dataformat.yaml.YAMLMapper myYamlMapper = new YAMLMapper();
    JsonNode node1 = myYamlMapper.readValue(rawDescriptor, tools.jackson.databind.JsonNode.class);
    com.fasterxml.jackson.databind.ObjectMapper objectMapper = new com.fasterxml.jackson.databind.ObjectMapper(new YAMLFactory());
    com.fasterxml.jackson.databind.JsonNode node2 = objectMapper.readValue(rawDescriptor, com.fasterxml.jackson.databind.JsonNode.class);
    System.out.println("node1 state: " + node1.get("state").getNodeType() + "\nnode2 state: " + node2.get("state").getNodeType());
}

OUTPUT:
node1 state: STRING
node2 state: NULL

I couldn’t find anything about this in the migration documentation.

Since my application logic depends on parsing files that may contain this special character, I need to stay compatible with the behavior implemented in Jackson 2.

How can I configure the Jackson 3 mapper to get the same result as in Jackson 2?

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    yamlIssue related to YAML format backend

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions