msgpack-java icon indicating copy to clipboard operation
msgpack-java copied to clipboard

JsonObject deserialisation

Open ashj11 opened this issue 9 months ago • 2 comments

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 https://github.com/msgpack/msgpack-java/issues/465#issuecomment-1695827215, 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

ashj11 avatar Apr 02 '25 08:04 ashj11

@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.

komamitsu avatar Apr 05 '25 05:04 komamitsu

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).

ashj11 avatar Apr 07 '25 11:04 ashj11