in common/src/main/java/org/opensearch/ml/common/dataframe/Row.java [95:155]
public static Row parse(XContentParser parser) throws IOException {
List<ColumnValue> values = new ArrayList<>();
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.currentToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_OBJECT) {
String fieldName = parser.currentName();
parser.nextToken();
switch (fieldName) {
case "values":
ensureExpectedToken(XContentParser.Token.START_ARRAY, parser.currentToken(), parser);
while (parser.nextToken() != XContentParser.Token.END_ARRAY) {
ensureExpectedToken(XContentParser.Token.START_OBJECT, parser.currentToken(), parser);
if (parser.nextToken() != XContentParser.Token.END_OBJECT) {
String columnTypeField = parser.currentName();
if (!"column_type".equals(columnTypeField)) {
throw new IllegalArgumentException("wrong column type, expect column_type field but got " + columnTypeField);
}
parser.nextToken();
String columnType = parser.text();
if (!"NULL".equals(columnType)) {
parser.nextToken();
String valueField = parser.currentName();
if (!"value".equals(valueField)) {
throw new IllegalArgumentException("wrong column value, expect value field but got " + valueField);
}
parser.nextToken();
}
switch (columnType) {
case "NULL":
values.add(new NullValue());
break;
case "BOOLEAN":
values.add(new BooleanValue(parser.booleanValue()));
break;
case "STRING":
values.add(new StringValue(parser.text()));
break;
case "INTEGER":
values.add(new IntValue(parser.intValue()));
break;
case "DOUBLE":
values.add(new DoubleValue(parser.doubleValue()));
break;
default:
break;
}
parser.skipChildren();
parser.nextToken();
}
}
break;
default:
parser.skipChildren();
break;
}
}
return new Row(values.toArray(new ColumnValue[0]));
}