jq를 사용하여 배열에 값을 추가하고 나머지는 유지하려고 합니다.
"access":{
"allowed_users":[
"admin",
"test",
],
제가 추가하고 싶은 내용은 위 내용입니다. 이를 사용하면 jq '.access.allowed_users + [ "test2" ]'
거기에 새 항목이 추가되지만 파일의 나머지 부분은 손실되므로 구성 파일을 다시 만들 수 없습니다.
답변1
추가하려고한다고 가정도착하다보여주신 JSON과 JSON 문서의 형식이 잘 구성되어 있습니다.
$ cat file.json
{
"access": {
"allowed_users": [
"admin",
"test"
]
}
}
넌 할 수있어
$ jq '.access.allowed_users += ["test32"]' file.json
{
"access": {
"allowed_users": [
"admin",
"test",
"test32"
]
}
}
+=
배열에 추가하기 위해 배열에 새 요소를 할당하는 방법을 사용합니다 .
쉘 변수에 새로운 값을 사용하십시오:
$ data='My "awesome" data'
$ jq --arg value "$data" '.access.allowed_users += [$value]' file.json
{
"access": {
"allowed_users": [
"admin",
"test",
"My \"awesome\" data"
]
}
}
한 번에 여러 항목을 추가하려면 다음 명령을 사용하여 항목을 추가하는 것이 가장 쉬운 방법입니다 --args
.
$ jq '.access.allowed_users += $ARGS.positional' file.json --args Bilbo Frodo Sam Merry Pippin
{
"access": {
"allowed_users": [
"admin",
"test",
"Bilbo",
"Frodo",
"Sam",
"Merry",
"Pippin"
]
}
}
--args
이 옵션의 후속 인수는 명령줄의 마지막 인수여야 합니다 .
파일을 변경하려면 임시 파일을 사용하세요.
jq ...one-of-the-above-approaches... >tmp.json &&
mv tmp.json file.json
이렇게 하면 어떤 이유로든 원본 파일이 실패할 경우 &&
원본 파일을 덮어쓰는 것을 방지할 수 있습니다 .jq