private Map<Object, Object> convertMap(MapFormatInfo mapFormatInfo, String path, JsonNode node) throws IOException {
        checkState(mapFormatInfo.getKeyFormatInfo() instanceof BasicFormatInfo,
                String.format("The key field format of map must be instanceof BasicFormatInfo, " +
                        "actual type is [%s] (path=[%s], text=[%s]).",
                        mapFormatInfo.getKeyFormatInfo().getClass(), path, node));

        final BasicFormatInfo<?> keyFormatInfo =
                (BasicFormatInfo<?>) mapFormatInfo.getKeyFormatInfo();
        final FormatInfo valueFormatInfo = mapFormatInfo.getValueFormatInfo();

        checkState(node.isObject(),
                String.format("The json node is not object, actual type is [%s] (path=[%s], " +
                        "text=[%s]).", node.getNodeType(), path, node));

        final int nodeSize = node.size();
        final Map<Object, Object> map = new HashMap<>(nodeSize);

        Iterator<String> childFieldNames = node.fieldNames();
        while (childFieldNames.hasNext()) {
            String childFieldName = childFieldNames.next();

            Object key;
            try {
                key = keyFormatInfo.deserialize(childFieldName);
            } catch (Throwable t) {
                throw new IOException(
                        String.format("Could not properly deserialize the key (path=[%s], text=[%s]).",
                                path, childFieldName),
                        t);
            }

            String childPath = path + "<" + childFieldName + ">";
            JsonNode childNode = node.get(childFieldName);
            Object value = convert(valueFormatInfo, childPath, childNode);

            map.put(key, value);
        }

        return map;
    }
Object mapper for parsing the JSON.
inlong-sort/sort-formats/format-rowdata/format-rowdata-json/src/main/java/org/apache/inlong/sort/formats/json/JsonRowDeserializationSchema.java