astanin / python-tabulate

Pretty-print tabular data in Python, a library and a command-line utility. Repository migrated from bitbucket.org/astanin/python-tabulate.
https://pypi.org/project/tabulate/
MIT License
2.1k stars 163 forks source link

How to tabulate JSON from stdin? #173

Open iainelder opened 2 years ago

iainelder commented 2 years ago

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.

astanin commented 1 year ago

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.

Tatsh commented 1 year ago

May want to use the jq utility with its @csv filter. I was looking to do the same but with lists of lists.

Stack Overflow question