diff --git a/src/io/json/write/serialize.rs b/src/io/json/write/serialize.rs index ea868435b9..acbb0ce71b 100644 --- a/src/io/json/write/serialize.rs +++ b/src/io/json/write/serialize.rs @@ -56,7 +56,9 @@ where array.iter(), |x, buf| { if let Some(x) = x { - if T::is_nan(*x) { + if T::is_infinite(*x) { + buf.extend(b"null") + } else if T::is_nan(*x) { buf.extend(b"null") } else { lexical_to_bytes_mut(*x, buf) diff --git a/tests/it/io/json/write.rs b/tests/it/io/json/write.rs index 895f0f5973..9c8d1313f2 100644 --- a/tests/it/io/json/write.rs +++ b/tests/it/io/json/write.rs @@ -28,18 +28,34 @@ fn int32() -> Result<()> { #[test] fn f32() -> Result<()> { - let array = Float32Array::from([Some(1.5), Some(2.5), Some(f32::NAN), None, Some(5.5)]); + let array = Float32Array::from([ + Some(1.5), + Some(2.5), + Some(f32::NAN), + Some(f32::INFINITY), + Some(f32::NEG_INFINITY), + None, + Some(5.5), + ]); - let expected = r#"[1.5,2.5,null,null,5.5]"#; + let expected = r#"[1.5,2.5,null,null,null,null,5.5]"#; test!(array, expected) } #[test] fn f64() -> Result<()> { - let array = Float64Array::from([Some(1.5), Some(2.5), Some(f64::NAN), None, Some(5.5)]); + let array = Float64Array::from([ + Some(1.5), + Some(2.5), + Some(f64::NAN), + Some(f64::INFINITY), + Some(f64::NEG_INFINITY), + None, + Some(5.5), + ]); - let expected = r#"[1.5,2.5,null,null,5.5]"#; + let expected = r#"[1.5,2.5,null,null,null,null,5.5]"#; test!(array, expected) }