Skip to content

Commit 66082b1

Browse files
committed
convert json timestamp
1 parent 36f838c commit 66082b1

File tree

1 file changed

+33
-1
lines changed

1 file changed

+33
-1
lines changed

kafka11/kafka11-source/src/main/java/com/dtstack/flink/sql/source/kafka/CustomerJsonDeserialization.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,12 @@
2424
import com.dtstack.flink.sql.source.AbsDeserialization;
2525
import com.dtstack.flink.sql.source.kafka.metric.KafkaTopicPartitionLagMetric;
2626
import org.apache.flink.api.common.typeinfo.TypeInformation;
27+
import org.apache.flink.api.common.typeinfo.Types;
2728
import org.apache.flink.api.java.typeutils.RowTypeInfo;
2829
import org.apache.flink.calcite.shaded.com.google.common.base.Strings;
2930
import org.apache.flink.metrics.MetricGroup;
3031
import org.apache.flink.shaded.guava18.com.google.common.collect.Maps;
32+
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonProcessingException;
3133
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.JsonNode;
3234
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.ObjectMapper;
3335
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.databind.node.JsonNodeType;
@@ -42,7 +44,11 @@
4244
import org.slf4j.LoggerFactory;
4345

4446
import java.io.IOException;
47+
import java.lang.reflect.Array;
4548
import java.lang.reflect.Field;
49+
import java.sql.Date;
50+
import java.sql.Time;
51+
import java.sql.Timestamp;
4652
import java.util.Iterator;
4753
import java.util.Map;
4854
import java.util.Set;
@@ -137,7 +143,8 @@ public Row deserialize(byte[] message) throws IOException {
137143
}
138144
} else {
139145
// Read the value as specified type
140-
Object value = objectMapper.treeToValue(node, fieldTypes[i].getTypeClass());
146+
147+
Object value = convert(node, fieldTypes[i]);
141148
row.setField(i, value);
142149
}
143150
}
@@ -245,4 +252,29 @@ protected void registerPtMetric(AbstractFetcher<Row, ?> fetcher) throws Exceptio
245252
private static String partitionLagMetricName(TopicPartition tp) {
246253
return tp + ".records-lag";
247254
}
255+
256+
private Object convert(JsonNode node, TypeInformation<?> info) {
257+
if (info.getTypeClass().equals(Types.BOOLEAN.getTypeClass())) {
258+
return node.asBoolean();
259+
} else if (info.getTypeClass().equals(Types.STRING.getTypeClass())) {
260+
return node.asText();
261+
} else if (info.getTypeClass().equals(Types.SQL_DATE.getTypeClass())) {
262+
return Date.valueOf(node.asText());
263+
} else if (info.getTypeClass().equals(Types.SQL_TIME.getTypeClass())) {
264+
// local zone
265+
return Time.valueOf(node.asText());
266+
} else if (info.getTypeClass().equals(Types.SQL_TIMESTAMP.getTypeClass())) {
267+
// local zone
268+
return Timestamp.valueOf(node.asText());
269+
} else {
270+
// for types that were specified without JSON schema
271+
// e.g. POJOs
272+
try {
273+
return objectMapper.treeToValue(node, info.getTypeClass());
274+
} catch (JsonProcessingException e) {
275+
throw new IllegalStateException("Unsupported type information '" + info + "' for node: " + node);
276+
}
277+
}
278+
}
279+
248280
}

0 commit comments

Comments
 (0)