public static Row jsonNodeToMetaModelRow(JsonNode node, DataSetHeader header) {
final int size = header.size();
final Object[] values = new Object[size];
for (int i = 0; i < size; i++) {
final String key = header.getSelectItem(i).getColumn().getName();
final JsonNode valueNode = node.get(key);
final Object value;
if (valueNode == null || valueNode.isNull()) {
value = null;
} else if (valueNode.isTextual()) {
value = valueNode.asText();
} else if (valueNode.isArray()) {
value = jsonNodeToList(valueNode);
} else if (valueNode.isObject()) {
value = jsonNodeToMap(valueNode);
} else if (valueNode.isBoolean()) {
value = valueNode.asBoolean();
} else if (valueNode.isInt()) {
value = valueNode.asInt();
} else if (valueNode.isLong()) {
value = valueNode.asLong();
} else if (valueNode.isDouble()) {
value = valueNode.asDouble();
} else {
value = valueNode;
}
values[i] = value;
}