Merge pull request #70 from jangsutsr/5913_allow_parsing_null_json_data

Allow parsing null JSON data
This commit is contained in:
Aaron Tan 2017-07-27 16:05:26 -04:00 committed by GitHub
commit 580871a60b
2 changed files with 32 additions and 1 deletions

View File

@ -57,8 +57,10 @@ class JSONParser(parsers.JSONParser):
try:
data = stream.read().decode(encoding)
if not data:
return {}
obj = json.loads(data, object_pairs_hook=OrderedDict)
if not isinstance(obj, dict):
if not isinstance(obj, dict) and obj is not None:
raise ParseError(_('JSON parse error - not a JSON object'))
return obj
except ValueError as exc:

View File

@ -0,0 +1,29 @@
import pytest
import StringIO
# AWX
from awx.api.parsers import JSONParser
# Django REST Framework
from rest_framework.exceptions import ParseError
@pytest.mark.parametrize(
'input_, output', [
('{"foo": "bar"}', {'foo': 'bar'}),
('null', None),
('', {}),
]
)
def test_jsonparser_valid_input(input_, output):
input_stream = StringIO.StringIO(input_)
assert JSONParser().parse(input_stream) == output
input_stream.close()
@pytest.mark.parametrize('invalid_input', ['1', '"foobar"', '3.14', '{"foo": "bar",}'])
def test_json_parser_invalid_input(invalid_input):
input_stream = StringIO.StringIO(invalid_input)
with pytest.raises(ParseError):
JSONParser().parse(input_stream)
input_stream.close()