[解決済み] JSON文字列をjqを使用してテーブルとしてフォーマットする方法は?
2022-03-11 02:38:32
質問
Bashスクリプトを始めたばかりで、JSONを扱うためにjqを偶然見つけました。
以下のようなJSON文字列をターミナルに出力するためにテーブルに変換する必要があります。
[{
"name": "George",
"id": 12,
"email": "[email protected]"
}, {
"name": "Jack",
"id": 18,
"email": "[email protected]"
}, {
"name": "Joe",
"id": 19,
"email": "[email protected]"
}]
端末に表示させたいもの
ID Name
=================
12 George
18 Jack
19 Joe
各行のemailプロパティを表示したくないので、jqコマンドで何らかのフィルタリングを行う必要があることに注意してください。以下のようにすると、名前とIDのプレーンなリストが得られます。
list=$(echo "$data" | jq -r '.[] | .name, .id')
printf "$list"
問題は、それを表のように表示できないことです。jqにはいくつかのフォーマットオプションがあるのは知っていますが
printf
. 私は、これらの値を配列で取得し、それをループして書式設定を行いたいと思うのですが・・・?私が試したものは、私に様々な結果を与えますが、私が本当に欲しいものは決してありません。
どなたか正しい方向を教えてください。
どのように解決するのですか?
のようなものではダメなのでしょうか?
echo '[{
"name": "George",
"id": 12,
"email": "[email protected]"
}, {
"name": "Jack",
"id": 18,
"email": "[email protected]"
}, {
"name": "Joe",
"id": 19,
"email": "[email protected]"
}]' | jq -r '.[] | "\(.id)\t\(.name)"'
出力
12 George
18 Jack
19 Joe
編集1 :
細かい書式設定には
awk
echo '[{
"name": "George",
"id": 12,
"email": "[email protected]"
}, {
"name": "Jack",
"id": 18,
"email": "[email protected]"
}, {
"name": "Joe",
"id": 19,
"email": "[email protected]"
}]' | jq -r '.[] | [.id, .name] | @csv' | awk -v FS="," 'BEGIN{print "ID\tName";print "============"}{printf "%s\t%s%s",$1,$2,ORS}'
ID Name
============
12 "George"
18 "Jack"
19 "Joe"
編集2 : への返答として
配列を含む変数をそのまま取得する方法はないのでしょうか? jqから?
なぜダメなのか?
少し複雑な例ですが(実際、あなたのものを修正しました)、電子メールを配列に変更することで、これを実証しています。
echo '[{
"name": "George",
"id": 20,
"email": [ "[email protected]" , "[email protected]" ]
}, {
"name": "Jack",
"id": 18,
"email": [ "[email protected]" , "[email protected]" ]
}, {
"name": "Joe",
"id": 19,
"email": [ "[email protected]" ]
}]' | jq -r '.[] | .email'
出力
[
"[email protected]",
"[email protected]"
]
[
"[email protected]",
"[email protected]"
]
[
"[email protected]"
]
関連
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] Microsoft JSONの日付はどのようにフォーマットするのですか?
-
[解決済み】GoでJSONのPost Requestを処理する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] UnicodeDecodeError: 'utf8' コーデックは位置3131のバイト0x80をデコードできません: 不正なスタートバイトです
-
[解決済み] Sequelizeとnode.jsを使った一括挿入の方法
-
[解決済み] Angular: 'Cannot find a differ supporting object '[object Object]' of type 'object'. NgForはArrayのようなIterableへのバインディングのみをサポートしています'。
-
[解決済み] JSONの未定義の値型
-
[解決済み】新しいPostgreSQL JSONデータ型内のフィールドを変更するにはどうすればよいですか?
-
[解決済み】Goの構造体をJSONに変換する
-
[解決済み】curlのためにJSONファイル経由でペイロードを渡すには?
-
[解決済み】文字列のJSON配列はどのように表現するのですか?
-
[解決済み】JSON文字列を辞書に変換する方法は?
-
[解決済み】bashスクリプトの関数で定義された変数でcurlのPOSTを使用する。