Specifying any object_pairs_hook makes JSON decoding break when JSONObject from json/decoder.py is used. Can be emulated easily by setting c_make_scanner = None at json/scanner.py Example script: ** import json test = '{"key": "value", "empty": {}}' def hook(pairs): return dict(pairs) print(json.loads(test, object_pairs_hook=hook)) ** This test will fail because the return statement on line 166 in http://hg.python.org/cpython/file/cfc777407b03/Lib/json/decoder.py lacks "+ 1" even though the statement on line 170 has it. Basically, any empty JSON object will cause "ValueError: Extra data: [...]".
Both the Python version and the C version are supposed to be subject to the same tests (at least in Python3, I don't remember the state of things in 2.7), so this probably indicates there is a missing test for this case. Do you have any interest in trying your hand at writing one? The tests are in Lib/test/json_tests in Python3.