@@ -211,7 +211,7 @@ internal fun KlaxonJson.encodeRow(frame: ColumnsContainer<*>, index: Int): JsonO
211
211
col is ColumnGroup <* > -> encodeRow(col, index)
212
212
col is FrameColumn <* > -> col[index]?.let { encodeFrame(it) }
213
213
col.isList() -> {
214
- array( col[index] as List <* >)
214
+ col[index]?. let { array(it as List <* >) } ? : array( )
215
215
}
216
216
col.typeClass in valueTypes -> {
217
217
val v = col[index]
@@ -229,8 +229,13 @@ internal fun KlaxonJson.encodeRow(frame: ColumnsContainer<*>, index: Int): JsonO
229
229
internal fun KlaxonJson.encodeFrame (frame : AnyFrame ): JsonArray <* > {
230
230
val allColumns = frame.columns()
231
231
232
+ // if there is only 1 column, then `isValidValueColumn` always true.
233
+ // But at the same time, we shouldn't treat dataFrameOf("value")(1,2,3) like unnamed column
234
+ // because it was created by user.
235
+ val isPossibleToFindUnnamedColumns = allColumns.size != 1
232
236
val valueColumn = allColumns.filter { it.name.startsWith(valueColumnName) }
233
- .maxByOrNull { it.name }?.let { valueCol ->
237
+ .takeIf { isPossibleToFindUnnamedColumns }
238
+ ?.maxByOrNull { it.name }?.let { valueCol ->
234
239
if (valueCol.kind() != ColumnKind .Value ) null
235
240
else {
236
241
// check that value in this column is not null only when other values are null
@@ -248,7 +253,8 @@ internal fun KlaxonJson.encodeFrame(frame: AnyFrame): JsonArray<*> {
248
253
}
249
254
250
255
val arrayColumn = frame.columns().filter { it.name.startsWith(arrayColumnName) }
251
- .maxByOrNull { it.name }?.let { arrayCol ->
256
+ .takeIf { isPossibleToFindUnnamedColumns }
257
+ ?.maxByOrNull { it.name }?.let { arrayCol ->
252
258
if (arrayCol.kind() == ColumnKind .Group ) null
253
259
else {
254
260
// check that value in this column is not null only when other values are null
0 commit comments