jq 데이터를 추가하고 나머지는 유지

jq 데이터를 추가하고 나머지는 유지

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

관련 정보