diff --git a/arrow/src/json/reader.rs b/arrow/src/json/reader.rs index c4e847082c2b..4912c5e4d487 100644 --- a/arrow/src/json/reader.rs +++ b/arrow/src/json/reader.rs @@ -927,8 +927,16 @@ impl Decoder { rows.iter() .map(|row| { row.get(&col_name) - .and_then(|value| value.as_f64()) - .and_then(num::cast::cast) + .and_then(|value| { + if value.is_i64() { + value.as_i64().map(num::cast::cast) + } else if value.is_u64() { + value.as_u64().map(num::cast::cast) + } else { + value.as_f64().map(num::cast::cast) + } + }) + .flatten() }) .collect::>(), )) @@ -1933,6 +1941,7 @@ mod tests { .unwrap(); assert_eq!(1, aa.value(0)); assert_eq!(-10, aa.value(1)); + assert_eq!(1627668684594000000, aa.value(2)); let bb = batch .column(b.0) .as_any() diff --git a/arrow/test/data/arrays.json b/arrow/test/data/arrays.json index 5dbdd19ffc00..6de2b0324e07 100644 --- a/arrow/test/data/arrays.json +++ b/arrow/test/data/arrays.json @@ -1,3 +1,3 @@ {"a":1, "b":[2.0, 1.3, -6.1], "c":[false, true], "d":"4"} {"a":-10, "b":[2.0, 1.3, -6.1], "c":[true, true], "d":"4"} -{"a":2, "b":[2.0, null, -6.1], "c":[false, null], "d":"text"} +{"a":1627668684594000000, "b":[2.0, null, -6.1], "c":[false, null], "d":"text"}