diff --git a/petl/io/json.py b/petl/io/json.py index 75600e6c..f7b8c39c 100644 --- a/petl/io/json.py +++ b/petl/io/json.py @@ -16,7 +16,7 @@ from petl.util.base import data, Table, dicts as _dicts, iterpeek -def fromjson(source, *args, **kwargs): +def fromjson(source=None, *args, **kwargs): """ Extract data from a JSON file. The file must contain a JSON array as the top level object, and each member of the array will be treated as a diff --git a/petl/test/test_executable.py b/petl/test/test_executable.py index 1b8645f4..795be4fd 100644 --- a/petl/test/test_executable.py +++ b/petl/test/test_executable.py @@ -3,8 +3,20 @@ import subprocess def test_executable(): - result = subprocess.run(""" + result = subprocess.check_output(""" (echo foo,bar ; echo a,b; echo c,d) | petl 'fromcsv().cut("foo").head(1).tocsv()' - """, shell=True, check=True, capture_output=True) - assert result.stdout == b'foo\r\na\r\n' + """, shell=True) + assert result == b'foo\r\na\r\n' + +def test_json_stdin(): + result = subprocess.check_output(""" + echo '[{"foo": "a", "bar": "b"}]' | + petl 'fromjson().tocsv()' + """, shell=True) + assert result == b'foo,bar\r\na,b\r\n' + result = subprocess.check_output(""" + ( echo '{"foo": "a", "bar": "b"}' ; echo '{"foo": "c", "bar": "d"}' ) | + petl 'fromjson(lines=True).tocsv()' + """, shell=True) + assert result == b'foo,bar\r\na,b\r\nc,d\r\n'