{"record":{"id":"fc552fdfb2d59d0e","repo":"apache/seatunnel","slug":"unsupported-data-type-fc552f","errorCode":"UNSUPPORTED_DATA_TYPE","errorMessage":"unsupported parse type: ${type}","messagePattern":"unsupported parse type: (.+?)","errorType":"error_code","errorClass":"SeaTunnelJsonFormatException","httpStatus":null,"severity":"error","filePath":"seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/RowToJsonConverters.java","lineNumber":223,"sourceCode":"                                            ISO_LOCAL_DATE_TIME.format(\n                                                    ((OffsetDateTime) value).toLocalDateTime()));\n                        }\n                    };\n                }\n                return new RowToJsonConverter() {\n                    @Override\n                    public JsonNode convert(ObjectMapper mapper, JsonNode reuse, Object value) {\n                        return mapper.getNodeFactory()\n                                .textNode(ISO_OFFSET_DATE_TIME.format((OffsetDateTime) value));\n                    }\n                };\n            case ARRAY:\n                return createArrayConverter((ArrayType) type);\n            case MAP:\n                MapType mapType = (MapType) type;\n                return createMapConverter(mapType.getKeyType(), mapType.getValueType());\n            default:\n                throw new SeaTunnelJsonFormatException(\n                        CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE,\n                        \"unsupported parse type: \" + type);\n        }\n    }\n\n    private RowToJsonConverter createRowConverter(SeaTunnelRowType rowType) {\n        final RowToJsonConverter[] fieldConverters =\n                Arrays.stream(rowType.getFieldTypes())\n                        .map(\n                                new Function<SeaTunnelDataType<?>, Object>() {\n                                    @Override\n                                    public Object apply(SeaTunnelDataType<?> seaTunnelDataType) {\n                                        return createConverter(seaTunnelDataType);\n                                    }\n                                })\n                        .toArray(\n                                new IntFunction<RowToJsonConverter[]>() {\n                                    @Override","sourceCodeStart":205,"sourceCodeEnd":241,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/RowToJsonConverters.java#L205-L241","documentation":"RowToJsonConverters.createNotNullConverter only implements converters for known SeaTunnel data types (ROW, ARRAY, MAP, primitives, etc.); any other/unmapped type reaches the default branch and fails with UNSUPPORTED_DATA_TYPE. It means the serializer cannot translate this SeaTunnel type into JSON.","triggerScenarios":"Converting a SeaTunnelRow to JSON where the row type contains a data type not handled by the converter's switch (e.g. an unsupported or newly added SeaTunnelDataType reaching createConverter -> createNotNullConverter).","commonSituations":"Using a connector/transform output with exotic types (e.g. new type variants added to the API after this format was written) as sink input for JSON format; mismatched type declarations in config; older format module paired with newer API types.","solutions":["Check the SeaTunnelRowType field types feeding the JSON serialization and cast unsupported fields to supported types (e.g. STRING, INT, ARRAY)","Upgrade seatunnel-formats/seatunnel-format-json to a version that supports the data type","Convert the unsupported type to a supported one upstream with a transform before the JSON sink","If a legitimate type is unsupported, extend createNotNullConverter with a case for it"],"exampleFix":"// before\nTransform: field kept as Map<ArrayType...> unsupported by JSON converter\n// after\nsql { sql = \"SELECT CAST(complex_field AS STRING) AS complex_field FROM source_table\" }","handlingStrategy":"type-guard","validationCode":"for (DataField f : rowType.getFields()) {\n    if (!SUPPORTED_JSON_TYPES.contains(f.getDataType().getSqlType())) {\n        throw new IllegalStateException(\"Type not JSON-serializable: \" + f.getDataType());\n    }\n}","typeGuard":"switch (type.getSqlType()) { case STRING: case INT: case BIGINT: case ARRAY: case MAP: case ROW: /* supported */ break; default: /* cast upstream */ }","tryCatchPattern":"try { converter = rowToJsonConverters.createConverter(rowType); } catch (SeaTunnelJsonFormatException e) { if (e.getSeaTunnelErrorCode() == CommonErrorCodeDeprecated.UNSUPPORTED_DATA_TYPE) { /* cast field or upgrade */ } else { throw e; } }","preventionTips":["Cast complex/exotic types to STRING before a JSON-format sink","Check supported types in RowToJsonConverters when designing pipeline types","Keep seatunnel-formats modules on the same version as seatunnel-api","Use a Transform (SQL CAST) to normalize types before serialization"],"tags":["json","serialization","unsupported-type","data-type"],"backgroundTag":"unsupported-dtype","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}