{"record":{"id":"31d29b796b68fe31","repo":"json-path/JsonPath","slug":"can-not-map-a-src-getclass-to-float","errorCode":null,"errorMessage":"can not map a \" + src.getClass() + \" to \" + Float.class.getName()","messagePattern":"can not map a \" \\+ src\\.getClass\\(\\) \\+ \" to \" \\+ Float\\.class\\.getName\\(\\)","errorType":"exception","errorClass":"MappingException","httpStatus":null,"severity":"error","filePath":"json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java","lineNumber":202,"sourceCode":"        }\n        public Float convert(Object src) {\n            if(src == null){\n                return null;\n            }\n            if(Float.class.isAssignableFrom(src.getClass())){\n                return (Float) src;\n            } else if (Integer.class.isAssignableFrom(src.getClass())) {\n                return ((Integer) src).floatValue();\n            } else if (Long.class.isAssignableFrom(src.getClass())) {\n                return ((Long) src).floatValue();\n            } else if (BigDecimal.class.isAssignableFrom(src.getClass())) {\n                return ((BigDecimal) src).floatValue();\n            } else if (Double.class.isAssignableFrom(src.getClass())) {\n                return ((Double) src).floatValue();\n            } else if (String.class.isAssignableFrom(src.getClass())) {\n                return Float.valueOf(src.toString());\n            }\n            throw new MappingException(\"can not map a \" + src.getClass() + \" to \" + Float.class.getName());\n        }\n    }\n    private static class BigDecimalReader extends JsonReaderI<BigDecimal> {\n        public BigDecimalReader() {\n            super(null);\n        }\n        public BigDecimal convert(Object src) {\n            if(src == null){\n                return null;\n            }\n            return new BigDecimal(src.toString());\n        }\n    }\n    private static class BigIntegerReader extends JsonReaderI<BigInteger> {\n        public BigIntegerReader() {\n            super(null);\n        }\n        public BigInteger convert(Object src) {","sourceCodeStart":184,"sourceCodeEnd":220,"githubUrl":"https://github.com/json-path/JsonPath/blob/62a4c9f0f65ba3f625aa0867d64c528ba72d09ec/json-path/src/main/java/com/jayway/jsonpath/spi/mapper/JsonSmartMappingProvider.java#L184-L220","documentation":"JsonSmartMappingProvider's FloatReader.convert() cannot convert the source object to a java.lang.Float. It accepts Float, Double, Integer, Long, Short, Byte, BigDecimal and String sources; anything else (JSONObject, JSONArray, Boolean, Date, custom types) throws MappingException.","triggerScenarios":"map(obj, Float.class, configuration) via JsonSmartMappingProvider where obj's runtime type is not a number or numeric String — commonly a container node or a boolean.","commonSituations":"Mapping an array/object node to Float because the JsonPath matched the wrong element; expecting String-to-Float parsing that fails on locale-formatted numbers (throws NumberFormatException from Float.valueOf instead); provider differences across environments.","solutions":["Ensure the source is a number or a well-formed numeric String before mapping to Float.class.","Adjust the JsonPath to select the scalar float field, not a node.","Read as Object and convert manually with instanceof Number / Float.parseFloat.","Use Jackson or Gson based MappingProvider for wider type support.","Implement a custom MappingProvider if you must map container/bean types."],"exampleFix":"// before\nFloat f = cfg.mappingProvider().map(booleanValue, Float.class, cfg); // throws\n// after\nObject v = JsonPath.read(json, \"$.ratio\");\nFloat f = (v instanceof Number) ? ((Number) v).floatValue() : Float.parseFloat(v.toString());","handlingStrategy":"type-guard","validationCode":"Object v = JsonPath.read(json, \"$.field\");\nif (!(v instanceof Number || v instanceof String))\n    throw new IllegalArgumentException(\"Cannot map \" + (v == null ? \"null\" : v.getClass()) + \" to Float\");","typeGuard":"static Float toFloat(Object v) {\n    if (v instanceof Number) return ((Number) v).floatValue();\n    if (v instanceof String) return Float.valueOf((String) v);\n    return null;\n}","tryCatchPattern":"try {\n    Float f = cfg.mappingProvider().map(value, Float.class, cfg);\n} catch (MappingException e) {\n    Float f = toFloat(value);\n    if (f == null) throw new IllegalArgumentException(\"Non-numeric value\", e);\n}","preventionTips":["Ensure source JSON contains real numbers, not booleans or strings, for Float targets.","Watch for locale-formatted decimal strings — Float.valueOf only parses dot decimals.","Check path resolution selects the intended scalar element.","Consider BigDecimal targets to avoid float precision and parsing pitfalls."],"tags":["json-path","mapping","type-conversion","json-smart"],"backgroundTag":"incompatible-source-type","analyzedSha":"62a4c9f0f65ba3f625aa0867d64c528ba72d09ec","analyzedAt":"2026-09-11T11:36:00.448Z","contentChangedAt":"2026-09-11T11:36:00.448Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}