カテゴリー
【Jqコマンド活用法】JSONオブジェクトを再構成〜フィールドの一部を書き換えてみる
※ 当ページには【広告/PR】を含む場合があります。
2022/10/01
Jqのアサインメント構文を理解する
「アサインメント(Assigment)」
『|=』
用法:
<左のJSON要素> |= <右のJSON要素>
意味:
左のJSON要素を右のJSON要素で置き換える
$ echo '{"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}' | jq '.pet.feature |= "三毛"'
{
"pet": {
"name": "たま",
"kind": "ネコ",
"feature": "三毛"
}
}
#jq1.6以降のバージョン
$ echo '{"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}' | jq '.pet.feature |= ("白毛","栗毛","三毛")'
{
"pet": {
"name": "たま",
"kind": "ネコ",
"feature": "白毛"
}
}
#jq1.5以前のバージョン
$ echo '{"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}' | jq '.pet.feature |= ("白毛","栗毛","三毛")'
{
"pet": {
"name": "たま",
"kind": "ネコ",
"feature": "三毛"
}
}
$ echo '{"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}' | jq '.pet.age |= "5歳"'
{
"pet": {
"name": "たま",
"kind": "ネコ",
"feature": "ブチ",
"age": "5歳"
}
}
empty
delete
$ echo '{"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}' | jq '.pet.name |= empty'
{
"pet": {
"kind": "ネコ",
"feature": "ブチ"
}
}
#以下でも同じ
$ echo '{"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}' | jq 'del(.pet.name)'
{
"pet": {
"kind": "ネコ",
"feature": "ブチ"
}
}
Jqの変数のシンボリックバインドを利用する
用法:
<バインドしたいJSON要素> as $<識別子> | ...
意味:
再利用したいJSON要素に識別子を使ってマークする
「$」
$ echo '{"owner":{"name":"山田 タロヲ","age":37,"occupation":"漁師","hobby":[{"name":"登山","carrier":"10年"},{"name":"料理","carrier":"4年"}],"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}}' | \
jq '.owner.pet as $pet | $pet'
{
"name": "たま",
"kind": "ネコ",
"feature": "ブチ"
}
.owner.pet
$pet
jqコマンドによる柔軟なJSONオブジェクト編集
$ echo '{"owner":{"name":"山田 タロヲ","age":37,"occupation":"漁師","hobby":[{"name":"登山","carrier":"10年"},{"name":"料理","carrier":"4年"}],"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}}' |\
jq '(.owner.pet |= empty).owner as $human | .owner.pet as $pet | {"owner":$pet} | .owner.pet |= $human'
{
"owner": {
"name": "たま",
"kind": "ネコ",
"feature": "ブチ",
"pet": {
"name": "山田 タロヲ",
"age": 37,
"occupation": "漁師",
"hobby": [
{
"name": "登山",
"carrier": "10年"
},
{
"name": "料理",
"carrier": "4年"
}
]
}
}
}
$ echo '{"owner":{"name":"山田 タロヲ","age":37,"occupation":"漁師","hobby":[{"name":"登山","carrier":"10年"},{"name":"料理","carrier":"4年"}],"pet":{"name":"たま","kind":"ネコ","feature":"ブチ"}}}' |\
jq '
#👇飼い主の情報だけをバインド
(.owner.pet |= empty).owner as $human |
#👇ペットの情報をバインド
.owner.pet as $pet |
#👇JSONオブジェクト全体をペットの情報から新規オブジェクトで置き換え
{"owner":$pet} |
#👇新規キーに飼い主の情報をセット
.owner.pet |= $human
'
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー