次のjsonファイルでは、
{
"email": "xxx",
"pass": "yyy",
"contact": [
{
"id": 111,
"name": "AAA"
}
],
"lname": "YYY",
"name": "AAA",
"group": [
{
"name": "AAA",
"lname": "YYY",
}
],
キー「名前」を探して、すべての場所でその値を「XXX」に置き換える必要があります。それはどのjqコマンドですか?
jq
関数に基づくwalk
の使用(最新バージョンが必要):
jq 'walk(.name?="XXX")' file
jq
がwalk
関数をサポートしていない場合は、次のように定義します。
jq '
# Apply f to composite entities recursively, and to atoms
def walk(f):
. as $in
| if type == "object" then
reduce keys[] as $key
( {}; . + { ($key): ($in[$key] | walk(f)) } ) | f
Elif type == "array" then map( walk(f) ) | f
else f
end;
walk(.name?="XXX")
' file
または、jtc
ベースのソリューション:
bash $ jtc -w'<name>l+0' -u'"XXX"' your.json
{
"contact": [
{
"id": 111,
"name": "XXX"
}
],
"email": "xxx",
"group": [
{
"lname": "YYY",
"name": "XXX"
}
],
"lname": "YYY",
"name": "XXX",
"pass": "yyy"
}
bash $