in linkis-engineconn-plugins/hive/src/main/java/org/apache/linkis/engineplugin/hive/serde/CustomerDelimitedJSONSerDe.java [61:214]
public static void serialize(
ByteStream.Output out,
Object obj,
ObjectInspector objInspector,
byte[] separators,
int level,
Text nullSequence,
boolean escaped,
byte escapeChar,
boolean[] needsEscape)
throws IOException, SerDeException {
if (obj == null) {
out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
} else {
char separator;
List list;
switch (objInspector.getCategory()) {
case PRIMITIVE:
writePrimitiveUTF8(
out, obj, (PrimitiveObjectInspector) objInspector, escaped, escapeChar, needsEscape);
return;
case LIST:
separator = (char) getSeparator(separators, level);
ListObjectInspector loi = (ListObjectInspector) objInspector;
list = loi.getList(obj);
ObjectInspector eoi = loi.getListElementObjectInspector();
if (list == null) {
out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
} else {
for (int i = 0; i < list.size(); ++i) {
if (i > 0) {
out.write(separator);
}
serialize(
out,
list.get(i),
eoi,
separators,
level + 1,
nullSequence,
escaped,
escapeChar,
needsEscape);
}
}
return;
case MAP:
separator = (char) getSeparator(separators, level);
char keyValueSeparator = (char) getSeparator(separators, level + 1);
MapObjectInspector moi = (MapObjectInspector) objInspector;
ObjectInspector koi = moi.getMapKeyObjectInspector();
ObjectInspector voi = moi.getMapValueObjectInspector();
Map<?, ?> map = moi.getMap(obj);
if (map == null) {
out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
} else {
boolean first = true;
Iterator var24 = map.entrySet().iterator();
while (var24.hasNext()) {
Map.Entry<?, ?> entry = (Map.Entry) var24.next();
if (first) {
first = false;
} else {
out.write(separator);
}
serialize(
out,
entry.getKey(),
koi,
separators,
level + 2,
nullSequence,
escaped,
escapeChar,
needsEscape);
out.write(keyValueSeparator);
serialize(
out,
entry.getValue(),
voi,
separators,
level + 2,
nullSequence,
escaped,
escapeChar,
needsEscape);
}
}
return;
case STRUCT:
separator = (char) getSeparator(separators, level);
StructObjectInspector soi = (StructObjectInspector) objInspector;
List<? extends StructField> fields = soi.getAllStructFieldRefs();
list = soi.getStructFieldsDataAsList(obj);
if (list == null) {
out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
} else {
for (int i = 0; i < list.size(); ++i) {
if (i > 0) {
out.write(separator);
}
serialize(
out,
list.get(i),
((StructField) fields.get(i)).getFieldObjectInspector(),
separators,
level + 1,
nullSequence,
escaped,
escapeChar,
needsEscape);
}
}
return;
case UNION:
separator = (char) getSeparator(separators, level);
UnionObjectInspector uoi = (UnionObjectInspector) objInspector;
List<? extends ObjectInspector> ois = uoi.getObjectInspectors();
if (ois == null) {
out.write(nullSequence.getBytes(), 0, nullSequence.getLength());
} else {
LazyUtils.writePrimitiveUTF8(
out,
new Byte(uoi.getTag(obj)),
PrimitiveObjectInspectorFactory.javaByteObjectInspector,
escaped,
escapeChar,
needsEscape);
out.write(separator);
serialize(
out,
uoi.getField(obj),
(ObjectInspector) ois.get(uoi.getTag(obj)),
separators,
level + 1,
nullSequence,
escaped,
escapeChar,
needsEscape);
}
return;
default:
throw new RuntimeException("Unknown category type: " + objInspector.getCategory());
}
}
}