- 修改数组域值
假设已知json定义:
$ cat addr.json
[
{
"id": "user0",
"type": "user",
"phone": "123",
"addr": "home address 0"
},
{
"id": "user1",
"type": "user",
"phone": "456",
"addr": "home address 1"
}
]
如何把id=user1的addr改掉呢。
$ jq \
--arg newaddr "the newaddr" \
'. = [.[] | if (.id == "user1") then (.addr = $newaddr ) else . end]' \
addr.json
运行结果是:
[
{
"id": "user0",
"type": "user",
"phone": "123",
"addr": "home address 0"
},
{
"id": "user1",
"type": "user",
"phone": "456",
"addr": "the newaddr"
}
]
- 一次修改多个域值
jq --arg newaddr "${NEWADDR}" \
--arg newphone "${NEWPHONE}" \
'. = [.[] | if (.id == "user0") then
.addr = $newaddr |
.phone = "tcl://" + $newphone
elif (.id == "user1" or .type == "manager") then
.phone = "<invalid>"
else
.
end
]' addr.json
- 修改的数组不是一个顶级域
$ cat addr.json
{
"division": {
"groups": {
"people": [
{
"id": "user0",
"type": "user",
"phone": "123",
"addr": "home address 0"
},
{
"id": "user1",
"type": "user",
"phone": "456",
"addr": "home address 1"
}
]
}
}
}
命令格式如下:
$ jq \
--arg newaddr "the newaddr" \
'.division.groups.people = [.division.groups.people[] | if (.id == "user1") then (.addr = $newaddr ) else . end]' \
addr.json
网友评论