JSONをきれいに見るCLI



私の作ったもの

これは、簡単に表示するためのリストにJSONをフォーマットするためのCLIです.
テーブルとして表示したいのでテーブルビューからTVと名付けました.

インストール方法
Macユーザーの場合は、それをインストールするHomebrewを使用することができます.
$ brew install tv
あなたが貨物を持っているならば、あなたはそれを使ってそれをインストールすることもできますcargo install .
注意tv-cli , ないtv .
$ cargo install tv-cli
他のOSの場合は、githubからダウンロードすることができますrelease ページ.

使い方
以来tv 最小のCLIとして作成されただけで、テーブルと関連するオプションを表示する機能を提供します.
  • テーブル内の配列としてJSONを表示する
  • キーとキーをキーで指定します
  • テーブルをいくつかのスタイルで表示する
  • これらは主要な機能です.

    表ビュー
    ユースケースとして、JSONを返すAPIを想定します.
    APIの例として、我々は使用されますjsonplaceholder .
    この場合、我々は使用するhttps://jsonplaceholder.typicode.com/users .
    このAPIは以下のデータを返します.
    $ curl -s https://jsonplaceholder.typicode.com/users
    [
      {
        "id": 1,
        "name": "Leanne Graham",
        "username": "Bret",
        "email": "[email protected]",
        "address": {
          "street": "Kulas Light",
          "suite": "Apt. 556",
          "city": "Gwenborough",
          "zipcode": "92998-3874",
          "geo": {
            "lat": "-37.3159",
            "lng": "81.1496"
          }
        },
        "phone": "1-770-736-8031 x56442",
        "website": "hildegard.org",
        "company": {
          "name": "Romaguera-Crona",
          "catchPhrase": "Multi-layered client-server neural-net",
          "bs": "harness real-time e-markets"
        }
      },
      ...
    ]
    
    簡単にテーブルビューを読み取るには、このデータを表示するには、我々はそれを入力するパイプを使用しますtv .
    $ curl -s https://jsonplaceholder.typicode.com/users | tv
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |id|name                    |username        |email                    |address|phone                |website      |company|
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |1 |Leanne Graham           |Bret            |[email protected]        |...    |1-770-736-8031 x56442|hildegard.org|...    |
    |2 |Ervin Howell            |Antonette       |[email protected]        |...    |010-692-6593 x09125  |anastasia.net|...    |
    |3 |Clementine Bauch        |Samantha        |[email protected]       |...    |1-463-123-4447       |ramiro.info  |...    |
    |4 |Patricia Lebsack        |Karianne        |[email protected]|...    |493-170-9623 x156    |kale.biz     |...    |
    |5 |Chelsey Dietrich        |Kamren          |[email protected] |...    |(254)954-1289        |demarco.info |...    |
    |6 |Mrs. Dennis Schulist    |Leopoldo_Corkery|[email protected]  |...    |1-477-935-8478 x6430 |ola.org      |...    |
    |7 |Kurtis Weissnat         |Elwyn.Skiles    |[email protected]   |...    |210.067.6132         |elvis.io     |...    |
    |8 |Nicholas Runolfsdottir V|Maxime_Nienow   |[email protected]     |...    |586.493.6943 x140    |jacynthe.com |...    |
    |9 |Glenna Reichert         |Delphine        |[email protected]  |...    |(775)976-6794 x41206 |conrad.com   |...    |
    |10|Clementina DuBuque      |Moriah.Stanton  |[email protected]   |...    |024-648-3804         |ambrose.net  |...    |
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    
    あなたが見ることができるように、我々は読みやすいテーブルビューにそれを変換することができた.
    多くの要素がある場合は、以下のコマンドを使用しても読みやすくするために使用することができます.
    既にJSONファイルを持っている場合は、コマンドへの引数としてパスを入力することもできます.
    $ tv data.json
    

    スタイルを変えるtv 数がある--style スタイルを変更するオプション.
    オプションは以下の通りです
  • アスキー
  • デフォルト
  • シャープ
  • 丸い
  • マークダウン
  • 表の表示
  • 平面
  • 罫線が表示されません
  • お好みの表示スタイルを使用します.
    --style rounded 適用される
    $ curl -s https://jsonplaceholder.typicode.com/users | tv --style --rounded
    ╭──┬────────────────────────┬────────────────┬─────────────────────────┬───────┬─────────────────────┬─────────────┬───────╮
    │id│name                    │username        │email                    │address│phone                │website      │company│
    ├──┼────────────────────────┼────────────────┼─────────────────────────┼───────┼─────────────────────┼─────────────┼───────┤
    │1 │Leanne Graham           │Bret            │[email protected]        │...    │1-770-736-8031 x56442│hildegard.org│...    │
    │2 │Ervin Howell            │Antonette       │[email protected]        │...    │010-692-6593 x09125  │anastasia.net│...    │
    │3 │Clementine Bauch        │Samantha        │[email protected]       │...    │1-463-123-4447       │ramiro.info  │...    │
    │4 │Patricia Lebsack        │Karianne        │[email protected]│...    │493-170-9623 x156    │kale.biz     │...    │
    │5 │Chelsey Dietrich        │Kamren          │[email protected] │...    │(254)954-1289        │demarco.info │...    │
    │6 │Mrs. Dennis Schulist    │Leopoldo_Corkery│[email protected]  │...    │1-477-935-8478 x6430 │ola.org      │...    │
    │7 │Kurtis Weissnat         │Elwyn.Skiles    │[email protected]   │...    │210.067.6132         │elvis.io     │...    │
    │8 │Nicholas Runolfsdottir V│Maxime_Nienow   │[email protected]     │...    │586.493.6943 x140    │jacynthe.com │...    │
    │9 │Glenna Reichert         │Delphine        │[email protected]  │...    │(775)976-6794 x41206 │conrad.com   │...    │
    │10│Clementina DuBuque      │Moriah.Stanton  │[email protected]   │...    │024-648-3804         │ambrose.net  │...    │
    ╰──┴────────────────────────┴────────────────┴─────────────────────────┴───────┴─────────────────────┴─────────────┴───────╯
    

    ヘッダを表示しない
    デフォルトでは、キー名が表示されますが、いくつかのケースでは必要ありません.
    The --no-headers オプションは、ディスプレイをオフに使用することができます.
    $ curl -s https://jsonplaceholder.typicode.com/users | tv --no-headers
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |1 |Leanne Graham           |Bret            |[email protected]        |...    |1-770-736-8031 x56442|hildegard.org|...    |
    |2 |Ervin Howell            |Antonette       |[email protected]        |...    |010-692-6593 x09125  |anastasia.net|...    |
    |3 |Clementine Bauch        |Samantha        |[email protected]       |...    |1-463-123-4447       |ramiro.info  |...    |
    |4 |Patricia Lebsack        |Karianne        |[email protected]|...    |493-170-9623 x156    |kale.biz     |...    |
    |5 |Chelsey Dietrich        |Kamren          |[email protected] |...    |(254)954-1289        |demarco.info |...    |
    |6 |Mrs. Dennis Schulist    |Leopoldo_Corkery|[email protected]  |...    |1-477-935-8478 x6430 |ola.org      |...    |
    |7 |Kurtis Weissnat         |Elwyn.Skiles    |[email protected]   |...    |210.067.6132         |elvis.io     |...    |
    |8 |Nicholas Runolfsdottir V|Maxime_Nienow   |[email protected]     |...    |586.493.6943 x140    |jacynthe.com |...    |
    |9 |Glenna Reichert         |Delphine        |[email protected]  |...    |(775)976-6794 x41206 |conrad.com   |...    |
    |10|Clementina DuBuque      |Moriah.Stanton  |[email protected]   |...    |024-648-3804         |ambrose.net  |...    |
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    

    入れ子になったフィールドも表示する
    デフォルトでは、プリミティブ値のみが表示され、残りは... .
    この場合、好ましくはjq 表示するフィールドとtv , しかし、すべての入れ子になったフィールドを表示するオプションもあります.
    すべての入れ子になったフィールドを表示するオプションもあります-r and --recursive オプション.
    $ curl -s https://jsonplaceholder.typicode.com/users | tv -r
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |id|name                    |username        |email                    |address|phone                |website      |company|
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |1 |Leanne Graham           |Bret            |[email protected]        |...    |1-770-736-8031 x56442|hildegard.org|...    |
    |2 |Ervin Howell            |Antonette       |[email protected]        |...    |010-692-6593 x09125  |anastasia.net|...    |
    |3 |Clementine Bauch        |Samantha        |[email protected]       |...    |1-463-123-4447       |ramiro.info  |...    |
    |4 |Patricia Lebsack        |Karianne        |[email protected]|...    |493-170-9623 x156    |kale.biz     |...    |
    |5 |Chelsey Dietrich        |Kamren          |[email protected] |...    |(254)954-1289        |demarco.info |...    |
    |6 |Mrs. Dennis Schulist    |Leopoldo_Corkery|[email protected]  |...    |1-477-935-8478 x6430 |ola.org      |...    |
    |7 |Kurtis Weissnat         |Elwyn.Skiles    |[email protected]   |...    |210.067.6132         |elvis.io     |...    |
    |8 |Nicholas Runolfsdottir V|Maxime_Nienow   |[email protected]     |...    |586.493.6943 x140    |jacynthe.com |...    |
    |9 |Glenna Reichert         |Delphine        |[email protected]  |...    |(775)976-6794 x41206 |conrad.com   |...    |
    |10|Clementina DuBuque      |Moriah.Stanton  |[email protected]   |...    |024-648-3804         |ambrose.net  |...    |
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    
    # company
    +------------------+----------------------------------------+------------------------------------+
    |name              |catchPhrase                             |bs                                  |
    +------------------+----------------------------------------+------------------------------------+
    |Romaguera-Crona   |Multi-layered client-server neural-net  |harness real-time e-markets         |
    |Deckow-Crist      |Proactive didactic contingency          |synergize scalable supply-chains    |
    |Romaguera-Jacobson|Face to face bifurcated interface       |e-enable strategic applications     |
    |Robel-Corkery     |Multi-tiered zero tolerance productivity|transition cutting-edge web services|
    |Keebler LLC       |User-centric fault-tolerant solution    |revolutionize end-to-end systems    |
    |Considine-Lockman |Synchronised bottom-line interface      |e-enable innovative applications    |
    |Johns Group       |Configurable multimedia task-force      |generate enterprise e-tailers       |
    |Abernathy Group   |Implemented secondary concept           |e-enable extensible e-tailers       |
    |Yost and Sons     |Switchable contextually-based project   |aggregate real-time technologies    |
    |Hoeger LLC        |Centralized empowering task-force       |target end-to-end models            |
    +------------------+----------------------------------------+------------------------------------+
    
    # address
    +-----------------+---------+--------------+----------+---+
    |street           |suite    |city          |zipcode   |geo|
    +-----------------+---------+--------------+----------+---+
    |Kulas Light      |Apt. 556 |Gwenborough   |92998-3874|...|
    |Victor Plains    |Suite 879|Wisokyburgh   |90566-7771|...|
    |Douglas Extension|Suite 847|McKenziehaven |59590-4157|...|
    |Hoeger Mall      |Apt. 692 |South Elvis   |53919-4257|...|
    |Skiles Walks     |Suite 351|Roscoeview    |33263     |...|
    |Norberto Crossing|Apt. 950 |South Christy |23505-1337|...|
    |Rex Trail        |Suite 280|Howemouth     |58804-1099|...|
    |Ellsworth Summit |Suite 729|Aliyaview     |45169     |...|
    |Dayna Park       |Suite 449|Bartholomebury|76495-3109|...|
    |Kattie Turnpike  |Suite 198|Lebsackbury   |31428-2261|...|
    +-----------------+---------+--------------+----------+---+
    
    # geo
    +--------+---------+
    |lat     |lng      |
    +--------+---------+
    |-37.3159|81.1496  |
    |-43.9509|-34.4618 |
    |-68.6102|-47.0653 |
    |29.4572 |-164.2990|
    |-31.8129|62.5342  |
    |-71.4197|71.7478  |
    |24.8918 |21.8984  |
    |-14.3990|-120.7677|
    |24.6463 |-168.8889|
    |-38.2386|57.2232  |
    +--------+---------+
    

    任意のフィールド
    任意のフィールドの値でテーブルをソートできます.
    フィールド名を-s, --sort オプションはその値でテーブルをソートします.
    $ curl -s https://jsonplaceholder.typicode.com/users | tv -s username
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |id|name                    |username        |email                    |address|phone                |website      |company|
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |2 |Ervin Howell            |Antonette       |[email protected]        |...    |010-692-6593 x09125  |anastasia.net|...    |
    |1 |Leanne Graham           |Bret            |[email protected]        |...    |1-770-736-8031 x56442|hildegard.org|...    |
    |9 |Glenna Reichert         |Delphine        |[email protected]  |...    |(775)976-6794 x41206 |conrad.com   |...    |
    |7 |Kurtis Weissnat         |Elwyn.Skiles    |[email protected]   |...    |210.067.6132         |elvis.io     |...    |
    |5 |Chelsey Dietrich        |Kamren          |[email protected] |...    |(254)954-1289        |demarco.info |...    |
    |4 |Patricia Lebsack        |Karianne        |[email protected]|...    |493-170-9623 x156    |kale.biz     |...    |
    |6 |Mrs. Dennis Schulist    |Leopoldo_Corkery|[email protected]  |...    |1-477-935-8478 x6430 |ola.org      |...    |
    |8 |Nicholas Runolfsdottir V|Maxime_Nienow   |[email protected]     |...    |586.493.6943 x140    |jacynthe.com |...    |
    |10|Clementina DuBuque      |Moriah.Stanton  |[email protected]   |...    |024-648-3804         |ambrose.net  |...    |
    |3 |Clementine Bauch        |Samantha        |[email protected]       |...    |1-463-123-4447       |ramiro.info  |...    |
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    

    セルを配置する位置を指定する
    デフォルトでは、それは整列したままですが、あなたは-a and --align アライメント位置を指定するオプション.
    つの可能な値は次のとおりです
  • 左側
  • センター

  • $ curl -s https://jsonplaceholder.typicode.com/users | tv -a center
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    |id|          name          |    username    |          email          |address|        phone        |   website   |company|
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    | 1|      Leanne Graham     |      Bret      |    [email protected]    |  ...  |1-770-736-8031 x56442|hildegard.org|  ...  |
    | 2|      Ervin Howell      |    Antonette   |    [email protected]    |  ...  | 010-692-6593 x09125 |anastasia.net|  ...  |
    | 3|    Clementine Bauch    |    Samantha    |    [email protected]   |  ...  |    1-463-123-4447   | ramiro.info |  ...  |
    | 4|    Patricia Lebsack    |    Karianne    |[email protected]|  ...  |  493-170-9623 x156  |   kale.biz  |  ...  |
    | 5|    Chelsey Dietrich    |     Kamren     | [email protected]|  ...  |    (254)954-1289    | demarco.info|  ...  |
    | 6|  Mrs. Dennis Schulist  |Leopoldo_Corkery| [email protected] |  ...  | 1-477-935-8478 x6430|   ola.org   |  ...  |
    | 7|     Kurtis Weissnat    |  Elwyn.Skiles  |  [email protected] |  ...  |     210.067.6132    |   elvis.io  |  ...  |
    | 8|Nicholas Runolfsdottir V|  Maxime_Nienow |   [email protected]  |  ...  |  586.493.6943 x140  | jacynthe.com|  ...  |
    | 9|     Glenna Reichert    |    Delphine    | [email protected] |  ...  | (775)976-6794 x41206|  conrad.com |  ...  |
    |10|   Clementina DuBuque   | Moriah.Stanton |  [email protected] |  ...  |     024-648-3804    | ambrose.net |  ...  |
    +--+------------------------+----------------+-------------------------+-------+---------------------+-------------+-------+
    

    最後に
    私は、それがJSONで返されるAPIをチェックするのに役に立つと思います、それで、それをためしてください!
    あなたはそれを使用しているときにバグを見つける場合は、それらを報告してくださいissue .
    あなたが見たい機能がある場合は、コメントを残してくださいdiscussion .