[ https://issues.apache.org/jira/browse/KAFKA-9667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andy Coates updated KAFKA-9667: ------------------------------- Description: The Connect Json serde was recently enhanced to support serializing decimals as standard JSON numbers, (Original work done under -KAFKA-8595)-, e.g. `1.23`. However, there is a bug in the implementation: it's stripping trailing zeros! `1.23` is _not_ the same as `1.230`. The first is a number accurate to 2 decimal places, where as the later is accurate to 3 dp. It is important that trailing zeros are not dropped when de(serializing) decimals. For some use-cases it may be acceptable to drop the trailing zeros, but for others it definitely is not. h3. Current Functionality If a JSON object was to contain the number `1.230` then the Java JsonDeserializer would correctly deserialize this into a `BigDecimal`. The BigDecimal would have a scale of 3, which is correct. However, if that same BigDecimal was then serialized back to JSON using the Java JsonSerializer it would incorrectly strip the zeros, serializing to `1.23`. h3. Expected Functionality When serializing, trailing zeros should be maintained. For example, a BigDecimal such as `1.230`, (3 dp), should be serialized as `1.230`. h3. Compatibility With this bug fix any computation on decimal values that resulted in a number with trailing zeros, would see the number correctly serialized with those trailing zeros. Both the old serialized number, e.g. `1.23`, and the proposed corrected serialized number, e.g. `1.230`, are valid JSON numbers. Downstream consumers should have no issue deserializing either. was: The Connect Json serde was recently enhanced to support serializing decimals as standard JSON numbers, (Original work done under -KAFKA-8595)-, e.g. `1.23`. However, there is a bug in the implementation: it's stripping trailing zeros! `1.23` is _not_ the same as `1.230`. The first is a number accurate to 2 decimal places, where as the later is accurate to 3 dp. It is important that trailing zeros are not dropped when de(serializing) decimals. For some use-cases it may be acceptable to drop the trailing zeros, but for others it definitely is not. h3. Current Functionality If a JSON object was to contain the number `1.230` then the Java JsonDeserializer would correctly deserialize this into a `BigDecimal`. The BigDecimal would have a scale of 3, which is correct. However, if that same BigDecimal was then serialized back to JSON using the Java JsonSerializer it would incorrectly strip the zeros, serializing to `1.23`. h3. Expected Functionality When serializing, trailing zeros should be maintained. For example, a BigDecimal such as `1.230`, (3 dp), should be serialized as `1.230`. h3. Compatibility With this bug fix any computation on decimal values that resulted in a number with trailing zeros, would see the number serialized with those trailing zeros. Both the old serialized number, e.g. `1.23`, and the proposed corrected serialized number, e.g. `1.230`, are valid JSON numbers. Downstream consumers should have no issue deserializing either. > Connect JSON serde strip trailing zeros > --------------------------------------- > > Key: KAFKA-9667 > URL: https://issues.apache.org/jira/browse/KAFKA-9667 > Project: Kafka > Issue Type: Bug > Components: KafkaConnect > Affects Versions: 2.4.0 > Reporter: Andy Coates > Assignee: Andy Coates > Priority: Major > > The Connect Json serde was recently enhanced to support serializing decimals > as standard JSON numbers, (Original work done under -KAFKA-8595)-, e.g. > `1.23`. However, there is a bug in the implementation: it's stripping > trailing zeros! `1.23` is _not_ the same as `1.230`. The first is a number > accurate to 2 decimal places, where as the later is accurate to 3 dp. > It is important that trailing zeros are not dropped when de(serializing) > decimals. For some use-cases it may be acceptable to drop the trailing > zeros, but for others it definitely is not. > h3. Current Functionality > If a JSON object was to contain the number `1.230` then the Java > JsonDeserializer would correctly deserialize this into a `BigDecimal`. The > BigDecimal would have a scale of 3, which is correct. > However, if that same BigDecimal was then serialized back to JSON using the > Java JsonSerializer it would incorrectly strip the zeros, serializing to > `1.23`. > h3. Expected Functionality > When serializing, trailing zeros should be maintained. For example, a > BigDecimal such as `1.230`, (3 dp), should be serialized as `1.230`. > h3. Compatibility > With this bug fix any computation on decimal values that resulted in a number > with trailing zeros, would see the number correctly serialized with those > trailing zeros. > Both the old serialized number, e.g. `1.23`, and the proposed corrected > serialized number, e.g. `1.230`, are valid JSON numbers. Downstream consumers > should have no issue deserializing either. > > -- This message was sent by Atlassian Jira (v8.3.4#803005)