This is an automated email from the ASF dual-hosted git repository.
corgy pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/seatunnel.git
The following commit(s) were added to refs/heads/dev by this push:
new 2a082b1917 [Fix][Serialize] prevent scientific notation for decimal
numbers in JSON output (#9186)
2a082b1917 is described below
commit 2a082b1917cf26f389c502c0531517323a8c587a
Author: misi <[email protected]>
AuthorDate: Tue Apr 22 14:22:26 2025 +0800
[Fix][Serialize] prevent scientific notation for decimal numbers in JSON
output (#9186)
Co-authored-by: misi <gientech.com>
---
.../seatunnel/format/json/JsonSerializationSchema.java | 5 +++++
.../format/json/JsonRowDataSerDeSchemaTest.java | 16 ++++++++++++++++
2 files changed, 21 insertions(+)
diff --git
a/seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/JsonSerializationSchema.java
b/seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/JsonSerializationSchema.java
index 17651a1c94..749295a503 100644
---
a/seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/JsonSerializationSchema.java
+++
b/seatunnel-formats/seatunnel-format-json/src/main/java/org/apache/seatunnel/format/json/JsonSerializationSchema.java
@@ -18,6 +18,7 @@
package org.apache.seatunnel.format.json;
+import org.apache.seatunnel.shade.com.fasterxml.jackson.core.JsonGenerator;
import org.apache.seatunnel.shade.com.fasterxml.jackson.databind.ObjectMapper;
import
org.apache.seatunnel.shade.com.fasterxml.jackson.databind.node.ObjectNode;
@@ -66,6 +67,10 @@ public class JsonSerializationSchema implements
SerializationSchema {
this.charset = StandardCharsets.UTF_8;
}
+ {
+ mapper.configure(JsonGenerator.Feature.WRITE_BIGDECIMAL_AS_PLAIN,
true);
+ }
+
@Override
public byte[] serialize(SeaTunnelRow row) {
if (node == null) {
diff --git
a/seatunnel-formats/seatunnel-format-json/src/test/java/org/apache/seatunnel/format/json/JsonRowDataSerDeSchemaTest.java
b/seatunnel-formats/seatunnel-format-json/src/test/java/org/apache/seatunnel/format/json/JsonRowDataSerDeSchemaTest.java
index beda96ff6e..8471756b8b 100644
---
a/seatunnel-formats/seatunnel-format-json/src/test/java/org/apache/seatunnel/format/json/JsonRowDataSerDeSchemaTest.java
+++
b/seatunnel-formats/seatunnel-format-json/src/test/java/org/apache/seatunnel/format/json/JsonRowDataSerDeSchemaTest.java
@@ -42,6 +42,7 @@ import org.junit.jupiter.api.Test;
import java.io.IOException;
import java.math.BigDecimal;
+import java.nio.charset.StandardCharsets;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -678,4 +679,19 @@ public class JsonRowDataSerDeSchemaTest {
"{\"timestamp\":\"2022-09-24T22:45:00.000123456\"}",
new String(new JsonSerializationSchema(schema,
"\\N").serialize(row)));
}
+
+ @Test
+ public void testSerializationWithNumber() {
+ SeaTunnelRowType schema =
+ new SeaTunnelRowType(
+ new String[] {"id", "code", "fe_result"},
+ new SeaTunnelDataType[] {INT_TYPE, STRING_TYPE, new
DecimalType(10, 2)});
+ JsonSerializationSchema jsonSerializationSchema =
+ new JsonSerializationSchema(schema,
StandardCharsets.UTF_8.name());
+ Object[] fields = new Object[] {1, "1001015",
BigDecimal.valueOf(80.00)};
+ SeaTunnelRow row = new SeaTunnelRow(fields);
+ byte[] serialize = jsonSerializationSchema.serialize(row);
+ String expected = "{\"id\":1,\"code\":\"1001015\",\"fe_result\":80}";
+ assertEquals(new String(serialize), expected);
+ }
}