質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

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

Q&A

解決済

1回答

4211閲覧

jqコマンドで親子関係にあるオブジェクトを結合する方法はありますでしょうか

nitakaho

総合スコア14

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

コマンド

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

0グッド

1クリップ

投稿2019/05/06 08:28

編集2019/05/07 23:43

下記のような親子関係にあるJSONオブジェクトをjqコマンドで結合することは可能でしょうか?
可能でしたら、コマンドをご教示いただきければと思います。

追加補足
jpコマンドのみでの実現が不可能であれば、各オブジェクトの整形やシェルスクリプト等の利用を含めて、実現可能でしょうか?

親オブジェクト(parents.json)

json

1{ 2 "parent": [ 3 { 4 "id": 1, 5 "name": "parent-a" 6 }, 7 { 8 "id": 2, 9 "name": "parent-b" 10 }, 11 { 12 "id": 3, 13 "name": "parent-c" 14 } 15 ] 16}
子オブジェクト(child.json)

json

1{ 2 "child": { 3 "id": 1, 4 "name": "child-x", 5 "parent-id": 1 6 } 7}
親子結合オブジェクト(parents-children.json)

上記のオブジェクトを結合して下記のようなオブジェクトを生成したいです。

json

1{ 2 "parent": [ 3 { 4 "id": 1, 5 "name": "parent-a", 6 "child": [ 7 { 8 "id": 1, 9 "name": "child-x" 10 } 11 ] 12 }, 13 { 14 "id": 2, 15 "name": "parent-b" 16 }, 17 { 18 "id": 3, 19 "name": "parent-c" 20 } 21 ] 22}

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

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

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

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

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

guest

回答1

0

ベストアンサー

jqの勉強がてら、ちょっとやってみました。いろいろ出来ますねこれ。
回りくどいことをしているかもしれませんがやりたい出力はできてはいるかと思います。

bash

1#!/bin/bash 2 3# child.jsonからparent-idを取得 4parent_id=$(jq '.child["parent-id"]' child.json) 5echo "parent-id: ${parent_id}" 6 7# parent.jsonから、該当idの配列インデックスを取得 8parent_index=$(jq ".parent | to_entries[] | select(.value.id == ${parent_id}) | .key" parent.json) 9 10# child.jsonからparent-idを取り、child: の中身だけ抽出 11child_without_parent_id=$(jq 'del(.child["parent-id"]) .child' child.json) 12echo -e "\n---- child json ---- \n${child_without_parent_id}\n---------" 13 14# 差し込み位置と差し込むjsonができたので代入して出力 15echo -e "\n---- merged json ----" 16jq ".parent[${parent_index}].child = [${child_without_parent_id}]" parent.json

投稿2019/05/12 09:05

Eggpan

総合スコア2727

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

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

nitakaho

2019/05/13 03:47

頂いたスクリプトで実現できました! ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問