{"record":{"id":"eca96d858d181119","repo":"prestodb/presto","slug":"invalid-cast-argument-eca96d","errorCode":"INVALID_CAST_ARGUMENT","errorMessage":"Expected a json object, but got %s","messagePattern":"Expected a json object, but got (.+?)","errorType":"error_code","errorClass":"JsonCastException","httpStatus":null,"severity":"error","filePath":"presto-main-base/src/main/java/com/facebook/presto/operator/scalar/JsonToMapCast.java","lineNumber":99,"sourceCode":"        BlockBuilderAppender valueAppender = createBlockBuilderAppender(mapType.getValueType());\n        MethodHandle methodHandle = METHOD_HANDLE.bindTo(mapType).bindTo(keyAppender).bindTo(valueAppender);\n        return new BuiltInScalarFunctionImplementation(\n                true,\n                ImmutableList.of(valueTypeArgumentProperty(RETURN_NULL_ON_NULL)),\n                methodHandle);\n    }\n\n    @UsedByGeneratedCode\n    public static Block toMap(MapType mapType, BlockBuilderAppender keyAppender, BlockBuilderAppender valueAppender, SqlFunctionProperties properties, Slice json)\n    {\n        try (JsonParser jsonParser = createJsonParser(JSON_FACTORY, json)) {\n            jsonParser.nextToken();\n            if (jsonParser.getCurrentToken() == JsonToken.VALUE_NULL) {\n                return null;\n            }\n\n            if (jsonParser.getCurrentToken() != START_OBJECT) {\n                throw new JsonCastException(format(\"Expected a json object, but got %s\", jsonParser.getText()));\n            }\n            BlockBuilder mapBlockBuilder = mapType.createBlockBuilder(null, 1);\n            BlockBuilder singleMapBlockBuilder = mapBlockBuilder.beginBlockEntry();\n            HashTable hashTable = new HashTable(mapType.getKeyType(), singleMapBlockBuilder);\n            int position = 0;\n            while (jsonParser.nextToken() != JsonToken.END_OBJECT) {\n                keyAppender.append(jsonParser, singleMapBlockBuilder, properties);\n                jsonParser.nextToken();\n                valueAppender.append(jsonParser, singleMapBlockBuilder, properties);\n\n                // Duplicate key detection is required even if the JSON is valid.\n                // For example: CAST(JSON '{\"1\": 1, \"01\": 2}' AS MAP<INTEGER, INTEGER>).\n                if (!hashTable.addIfAbsent(position)) {\n                    throw new JsonCastException(\"Duplicate keys are not allowed\");\n                }\n                position += 2;\n            }\n            if (jsonParser.nextToken() != null) {","sourceCodeStart":81,"sourceCodeEnd":117,"githubUrl":"https://github.com/prestodb/presto/blob/55bb57d202de3b926896fa966c2c4a44c779634e/presto-main-base/src/main/java/com/facebook/presto/operator/scalar/JsonToMapCast.java#L81-L117","documentation":"Cast error from the JSON-to-map cast: the JSON text being cast was parsed successfully but its top-level token is not an object (e.g. it is an array or a scalar). A map can only be built from a JSON object whose keys become map keys; the %s reports the actual JSON token found.","triggerScenarios":"Thrown at presto-main-base/src/main/java/com/facebook/presto/operator/scalar/JsonToMapCast.java:99 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Ensure the JSON value is an object like {\"k\": v} before casting to map","Use json_parse plus cast(json AS map(...)) only on object-shaped JSON","Transform arrays with transform() into maps first if the data is array-shaped"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"55bb57d202de3b926896fa966c2c4a44c779634e","analyzedAt":"2026-09-04T12:50:26.162Z","contentChangedAt":"2026-09-04T12:50:26.162Z","schemaVersion":2},"datasetVersion":"2026-09-12T02:17:10.037Z"}