diff --git a/doc/source/whatsnew/v2.2.0.rst b/doc/source/whatsnew/v2.2.0.rst index 29a2d5c0b5877..e40553353fc20 100644 --- a/doc/source/whatsnew/v2.2.0.rst +++ b/doc/source/whatsnew/v2.2.0.rst @@ -349,6 +349,7 @@ I/O - Bug in :func:`read_excel`, with ``engine="xlrd"`` (``xls`` files) erroring when file contains NaNs/Infs (:issue:`54564`) - Bug in :func:`to_excel`, with ``OdsWriter`` (``ods`` files) writing boolean/string value (:issue:`54994`) - Bug in :meth:`pandas.read_excel` with an ODS file without cached formatted cell for float values (:issue:`55219`) +- Bug where :meth:`DataFrame.to_json` would raise an ``OverflowError`` instead of a ``TypeError`` with unsupported NumPy types (:issue:`55403`) Period ^^^^^^ diff --git a/pandas/_libs/src/vendored/ujson/python/objToJSON.c b/pandas/_libs/src/vendored/ujson/python/objToJSON.c index 8c55505f61b51..a4c93f1560a0e 100644 --- a/pandas/_libs/src/vendored/ujson/python/objToJSON.c +++ b/pandas/_libs/src/vendored/ujson/python/objToJSON.c @@ -1610,9 +1610,9 @@ void Object_beginTypeContext(JSOBJ _obj, JSONTypeContext *tc) { PyArray_DescrFromType(NPY_DOUBLE)); tc->type = JT_DOUBLE; return; - } else if (PyArray_Check(obj) && PyArray_CheckScalar(obj)) { + } else if (PyArray_CheckScalar(obj)) { PyErr_Format(PyExc_TypeError, - "%R (0d array) is not JSON serializable at the moment", + "%R (numpy-scalar) is not JSON serializable at the moment", obj); goto INVALID; } else if (object_is_na_type(obj)) { diff --git a/pandas/tests/io/json/test_ujson.py b/pandas/tests/io/json/test_ujson.py index d5f8c5200c4a3..646f6745936bd 100644 --- a/pandas/tests/io/json/test_ujson.py +++ b/pandas/tests/io/json/test_ujson.py @@ -814,10 +814,19 @@ def test_array_float(self): def test_0d_array(self): # gh-18878 - msg = re.escape("array(1) (0d array) is not JSON serializable at the moment") + msg = re.escape( + "array(1) (numpy-scalar) is not JSON serializable at the moment" + ) with pytest.raises(TypeError, match=msg): ujson.ujson_dumps(np.array(1)) + def test_array_long_double(self): + msg = re.compile( + "1234.5.* \\(numpy-scalar\\) is not JSON serializable at the moment" + ) + with pytest.raises(TypeError, match=msg): + ujson.ujson_dumps(np.longdouble(1234.5)) + class TestPandasJSONTests: def test_dataframe(self, orient):