python-tabulate
python-tabulate copied to clipboard
How to tabulate JSON from stdin?
When I run a command like this:
tabulate --format github - <<"EOF"
[
{
"column1": "data",
"column2": 123,
"column3": true,
"column4": null
},
{
"column1": "Longer string",
"column2": 123,
"column3": true,
"column4": null
}
]
EOF
I expect output like this:
| column1 | column2 | column3 | column4 |
|---------------|-----------|-----------|-----------|
| data | 123 | True | |
| Longer string | 123 | True | |
Unfortunately I get output like this:
|---|------------|---------|----------|
| [ | | | |
| | { | | |
| | "column1": | "data", | |
| | "column2": | 123, | |
| | "column3": | true, | |
| | "column4": | null | |
| | }, | | |
| | { | | |
| | "column1": | "Longer | string", |
| | "column2": | 123, | |
| | "column3": | true, | |
| | "column4": | null | |
| | } | | |
| ] | | | |
In the README for the command-line utility I don't see any input format options or an expected input format.
As a library the README says tabulate supports "list or another iterable of dicts (keys as columns)". This matches my use case as it's what you would get after converting the input to via json.load
Am I missing something?
If not, would you consider supporting this use case?
Currently I use jtbl for this (https://github.com/kellyjonbrazil/jtbl/issues/9) but I'd like tabulate to support it too as it has even more useful formatting options.
If it's not possible to guess the input format I'd accept something like an --input-format json similar to in2csv's --format json option.
tabulate as a command line tool is somewhat behind tabulate the library. In particular at the moment it handles only white-space-separated values as input, and only a subset of output formats and options. It can definitely be improved.
May want to use the jq utility with its @csv filter. I was looking to do the same but with lists of lists.