From 2d06f370c7874fe4276d5f9f4ef2260e4ca281eb Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Tue, 30 May 2023 23:01:39 -0700 Subject: [PATCH] fix(rust): json_extract on empty series (#9126) --- polars/polars-json/src/ndjson/deserialize.rs | 4 +++- py-polars/tests/unit/namespaces/test_string.py | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/polars/polars-json/src/ndjson/deserialize.rs b/polars/polars-json/src/ndjson/deserialize.rs index b3d41e8fad5e..229f1cf8afa5 100644 --- a/polars/polars-json/src/ndjson/deserialize.rs +++ b/polars/polars-json/src/ndjson/deserialize.rs @@ -20,7 +20,9 @@ pub fn deserialize_iter<'a>( buf.push_str(row); buf.push(',') } - let _ = buf.pop(); + if buf.len() > 1 { + let _ = buf.pop(); + } buf.push(']'); let slice = unsafe { buf.as_bytes_mut() }; let out = simd_json::to_borrowed_value(slice) diff --git a/py-polars/tests/unit/namespaces/test_string.py b/py-polars/tests/unit/namespaces/test_string.py index de0e9b5a152a..f40e336f189f 100644 --- a/py-polars/tests/unit/namespaces/test_string.py +++ b/py-polars/tests/unit/namespaces/test_string.py @@ -266,6 +266,11 @@ def test_json_extract_series() -> None: dtype2 = pl.Struct([pl.Field("a", pl.Int64)]) assert_series_equal(s.str.json_extract(dtype2), expected) + s = pl.Series([], dtype=pl.Utf8) + expected = pl.Series([], dtype=pl.List(pl.Int64)) + dtype = pl.List(pl.Int64) + assert_series_equal(s.str.json_extract(dtype), expected) + def test_json_extract_lazy_expr() -> None: dtype = pl.Struct([pl.Field("a", pl.Int64), pl.Field("b", pl.Boolean)])