diff --git a/crates/dbx-core/src/table_import.rs b/crates/dbx-core/src/table_import.rs index 287b9242fe..a7c20704ec 100644 --- a/crates/dbx-core/src/table_import.rs +++ b/crates/dbx-core/src/table_import.rs @@ -178,6 +178,7 @@ pub fn parse_csv_bytes(bytes: &[u8], preview_limit: usize) -> Result Result { + let bytes = bytes.strip_prefix(b"\xEF\xBB\xBF").unwrap_or(bytes); let value: serde_json::Value = serde_json::from_slice(bytes).map_err(|e| e.to_string())?; let items = match value { serde_json::Value::Array(items) => items, @@ -599,6 +600,15 @@ mod tests { assert_eq!(parsed.rows[1], vec![serde_json::json!(2), serde_json::Value::Null, serde_json::json!(true),]); } + #[test] + fn parses_json_with_utf8_bom() { + let parsed = parse_json_bytes(b"\xEF\xBB\xBF[{\"id\":1,\"name\":\"Ada\"}]", 10).unwrap(); + + assert_eq!(parsed.columns, vec!["id", "name"]); + assert_eq!(parsed.total_rows, 1); + assert_eq!(parsed.rows[0], vec![serde_json::json!(1), serde_json::json!("Ada")]); + } + #[test] fn builds_import_insert_batches_from_mapped_columns() { let mappings = vec![