JSON 문서에 제공된 환경 변수 값을 업데이트하는 방법

JSON 문서에 제공된 환경 변수 값을 업데이트하는 방법

다음 JSON 파일을 입력으로 사용해야 하며 파일에 여러 변수 항목이 포함될 수 있습니다. 환경 변수를 var1검색 var2하고 아래 JSON의 값을 바꿔야 합니다.

{
  "var1": "valueplaceholder",
  "var2": "valueplaceholder"
}

나는 다음 명령을 시도했다

cat input.json | sed "s/\"\([A-Z0-9_]*\)\":\s*\"\([A-Za-z0-9_]*\)\"/\"\1\": \"$\1\"/g"

하지만 다음과 같은 출력이 생성됩니다.

{
  "var1": "$var1",
  "var2": "$var2"
}

변수의 값을 얻는 방법은 무엇입니까? 즉, $var1text 값을 바꿔야 합니다 $var1.

답변1

주어진

$ cat file.json
{ "var1": "valueplaceholder", "var2": "valueplaceholder", "var3": "valueplaceholder" }

그런 다음 with_entries구조 를 빌려jq를 사용하여 객체의 키와 값을 교환하는 방법은 무엇입니까?그리고 jq의 $ENV배열을 사용하십시오.

$ export var1="foo" var2="bar"
$ jq 'with_entries( .value = $ENV[.key] )' file.json
{
  "var1": "foo",
  "var2": "bar",
  "var3": null
}

또는 일치하지 않는 변수를 빈 문자열로 설정하거나 원래 값을 유지하려는 경우

$ jq 'with_entries( .value = ($ENV[.key] // "") )' file.json
{
  "var1": "foo",
  "var2": "bar",
  "var3": ""
}

또는

$ jq 'with_entries( .value = ($ENV[.key] // .value) )' file.json
{
  "var1": "foo",
  "var2": "bar",
  "var3": "valueplaceholder"
}

아니면 원한다면삭제존재하지 않는 키

$ jq 'with_entries( .value = ($ENV[.key] // empty) )' file.json
{
  "var1": "foo",
  "var2": "bar"
}

관련 정보