🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

Q&A

解決済

2回答

2157閲覧

jqコマンドでキーと値を加工して取得したい

anpuru

総合スコア14

コマンド

コマンドとは特定のタスクを行う為に、コンピュータープログラムへ提示する指示文です。多くの場合、コマンドはShellやcmdようなコマンドラインインターフェイスに対する指示文を指します。

0グッド

0クリップ

投稿2021/03/21 17:10

編集2021/03/22 04:12

やりたいこと

{ "admin": { "aaa": "test", "bbb": "000" }, "foo": { "c": { "aaa": "123" } } }

このようなJSONファイルがあった場合に、

jqコマンドまたはlinuxのコマンドで

admin.aaa=test admin.bbb=000 foo.c.aaa=123

という形で加工して取得したいです

ご教授頂けますと幸いです。
よろしくお願いいたします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

2パターン出来ました。

sh

1jq 'keys[0] as $k | .[] | to_entries| .[] | map(.) | $k+"."+.[0]+"="+.[1]' 2 3jq 'keys[0] as $k | .[] as $a | .[] | keys | .[] | $k+"."+.+"="+$a[.]'

投稿2021/03/21 22:51

otn

総合スコア85882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anpuru

2021/03/22 04:15

ご教授ありがとうございます。 質問に漏れがありましたので、修正させていただきましたが、 admin以外にも、キー"foo"がある場合は、そちらも再帰的に取得したいです。
otn

2021/03/22 04:36

質問を小出しにするのは、回答者の二度手間三度手間です。 応用で出来ると思いますが、自分で出来ますか?
guest

0

ベストアンサー

--streamオプションを使うと簡単にできそうです。

jq -r --stream 'select(length==2)|((.[0]|join("."))+"="+.[1])'

投稿2021/03/22 04:39

bsdfan

総合スコア4794

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

anpuru

2021/03/22 04:49

ご回答ありがとうございます。 参考にさせていただきます。
otn

2021/03/22 05:01

丁度ぴったりの機能があったんですね。マニュアルだと outputing arrays of path and leaf values と書いてあり、length==2のものはその通りになってますが、length==1 の要素つまり [["admin","bbb"]] 等は、何を意味しているのか、ご存じでしょうか?
bsdfan

2021/03/22 05:28

Streaming forms include [<path>, <leaf-value>] (to indicate any scalar value, empty array, or empty object), and [<path>] (to indicate the end of an array or object). とあるので、length==2が各要素(スカラーor空配列or空オブジェクト)で、length==1が配列orオブジェクトの終わりを表しているようです。 ストリーミングで、前から順番に処理をしていると、終わりがわかる必要がある場合もあるのかと。(今回は不要でしたが)
otn

2021/03/22 05:33

マニュアルの---streamオプションの部分しか見ていませんでした。後半にさらに説明があったんですね。 なるほど。終わりの印ですか。至れり尽くせりの機能ですね。活用できそうです。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問