Skip to content

JsonObject deserialisation #883

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
ashj11 opened this issue Apr 2, 2025 · 2 comments
Open

JsonObject deserialisation #883

ashj11 opened this issue Apr 2, 2025 · 2 comments

Comments

@ashj11
Copy link

ashj11 commented Apr 2, 2025

I am using JsonReader to read json bytes to JsonObject. What is the equivalent for msgpack?
Below is the code we are using for desrialising json to JsonObject.

JsonReader jsonReader = Json.createReader(content);
            object =  jsonReader.readObject();
            jsonReader.close();

For deserialising JsonObject msgpack bytes to JsonObject in java, I have tried ObjectMapper, but it fails with

com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot find a deserializer for non-concrete Map type [map type; class jakarta.json.JsonObject, [simple type, class java.lang.String] -> [simple type, class jakarta.json.JsonValue]]

Below is the sample i have tried, which produces above error. What is the right way to deserialise a JsonObject in msgpack?

String nodeInfo = "{\n" +
        "\t\"nodeType\": \"directory\"\n" +
        "}";
    
    // Create JsonObject from nodeInfo string
    JsonObject node;
    try (jakarta.json.JsonReader jsonReader = jakarta.json.Json.createReader(new ByteArrayInputStream(nodeInfo.getBytes(StandardCharsets.UTF_8)))) {
        node = jsonReader.readObject();
    }

    // Create MessagePack data
    ObjectMapper msgpackMapper = new ObjectMapper(new MessagePackFactory());
    byte[] bytes = msgpackMapper.writeValueAsBytes(node);

From #465 (comment), it looks like with ObjectMapper, JsonObject deserialisation used to work before. But it does not work now. Could you please suggest a solution?

Versions used:
jackson version - 2.15.3
msgpack version - 0.9.7

@komamitsu
Copy link
Member

@ashj11 Can you confirm the issue doesn't happen with com.fasterxml.jackson.core:jackson-databind? If the issue doesn't occur with com.fasterxml.jackson.core:jackson-databind but it occurs with org.msgpack:jackson-dataformat-msgpack, it's a bug of this project and I can look into it.

@ashj11
Copy link
Author

ashj11 commented Apr 7, 2025

Please ignore the second part of my question. I had tested with a String value and hence it was not able to decode to a class.

But want to know more about decoding the msgpack bytes to a JsonObject. I have made it work using custom code with MessageUnpacker. It would have been great if there was a utility to unpack hierarchical content for all types similar to Json.createReader(content).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants