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);
+    }
 }

Reply via email to