From: Thomas Kowalski Date: Fri, 29 May 2026 19:53:21 +0000 (+0200) Subject: gh-149056: Properly pass array_hook in json.load() to json.loads() (GH-149057) X-Git-Url: http://git.ipfire.org/gitweb/index.cgi?a=commitdiff_plain;h=f87d9605d3f9489d33aaf97a97fa9cb81cd7cc40;p=thirdparty%2FPython%2Fcpython.git gh-149056: Properly pass array_hook in json.load() to json.loads() (GH-149057) --- diff --git a/Lib/json/__init__.py b/Lib/json/__init__.py index 9681a8fe53ec..37a86831ff94 100644 --- a/Lib/json/__init__.py +++ b/Lib/json/__init__.py @@ -307,7 +307,7 @@ def load(fp, *, cls=None, object_hook=None, parse_float=None, cls=cls, object_hook=object_hook, parse_float=parse_float, parse_int=parse_int, parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, - array_hook=None, **kw) + array_hook=array_hook, **kw) def loads(s, *, cls=None, object_hook=None, parse_float=None, diff --git a/Lib/test/test_json/test_decode.py b/Lib/test/test_json/test_decode.py index d846c8af7ec4..1d51fb2de0e6 100644 --- a/Lib/test/test_json/test_decode.py +++ b/Lib/test/test_json/test_decode.py @@ -87,6 +87,13 @@ class TestDecode: self.assertEqual(self.loads('[]', array_hook=tuple), ()) + def test_load_array_hook(self): + # json.load must forward array_hook to loads + fp = StringIO('[10, 20, 30]') + result = self.json.load(fp, array_hook=tuple) + self.assertEqual(result, (10, 20, 30)) + self.assertEqual(type(result), tuple) + def test_decoder_optimizations(self): # Several optimizations were made that skip over calls to # the whitespace regex, so this test is designed to try and diff --git a/Misc/NEWS.d/next/Library/2026-04-29-08-10-17.gh-issue-149056.jnaD4W.rst b/Misc/NEWS.d/next/Library/2026-04-29-08-10-17.gh-issue-149056.jnaD4W.rst new file mode 100644 index 000000000000..0026d02c8762 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2026-04-29-08-10-17.gh-issue-149056.jnaD4W.rst @@ -0,0 +1,2 @@ +Fix :func:`json.load` not forwarding the *array_hook* argument to +:func:`json.loads`. Patch by Thomas Kowalski.