シェルスクリプトを使用してJsonをテーブル形式に変換する

シェルスクリプトを使用してJsonをテーブル形式に変換する

sfdx差|ティー結果.json;

ここでは、json形式の結果/応答を取得し、それをresult.jsonファイルに追加します。以下は私が得るjsonです。

{
  "status": 3,
  "result": {
    "source": {
      "type": "folder",
      "origin": "/source"
    },
    "target": {
      "type": "folder",
      "origin": "/target"
    },
    "difs": [
      {
        "type": "In Progress",
        "entity": "Phone",
        "result": "added"
      },
      {
        "type": "Completed",
        "entity": "SMS",
        "result": "added"
      },
      {
        "type": "Scheduled",
        "entity": "Web",
        "result": "added"
      }
    ]
  }
}

表形式で表示する必要があります。 ここに画像の説明を入力してください。

私たちがこれを行う方法はありますか?私はシェルスクリプトに初めて接するので、助けてください。

ベストアンサー1

現在の質問のJSON文書があると、次のjqコマンドはそれを表ヘッダーを含む表示された表形式に対応するCSV形式に変換します。

jq -r '["Status","Value","Result"],
    (.result.difs[] | [.type,.entity,.result]) | @csv' file.json

まず、CSVに変換する必要がある各行の値の配列を作成し、組み込み演算子を使用して@csv適切に参照されるCSVデータを作成します。

サンプルJSONドキュメントが与えられた場合、出力は次のようになります。

"Status","Value","Result"
"In Progress","Phone","added"
"Completed","SMS","added"
"Scheduled","Web","added"

後でテーブルを作成するために使用したいスプレッドシートプログラムにインポートできます。

cvslookコマンドラインCSVパースツールツールキットを使用してそれを後処理すると、csvkitテーブルのMarkdownバリアントを取得できます。

jq -r '["Status","Value","Result"],
    (.result.difs[] | [.type,.entity,.result]) | @csv' file.json |
csvlook

これは出力されます

| Status      | Value | Result |
| ----------- | ----- | ------ |
| In Progress | Phone | added  |
| Completed   | SMS   | added  |
| Scheduled   | Web   | added  |

マークダウンでレンダリングすると、次のようになります。

状態 結果
進行中 電話 次へ追加
十分 ショートメッセージ 次へ追加
予約する ネットワーク 次へ追加

おすすめ記事