jq를 사용하여 bash 배열을 명령줄에서 json 배열로 변환하는 방법은 무엇입니까? [복사]

jq를 사용하여 bash 배열을 명령줄에서 json 배열로 변환하는 방법은 무엇입니까? [복사]
$ jq -c -n -e '[$x, $y]' --argjson x '"a"' --argjson y '"b"'
["a","b"]

위와 같은 일을 할 수 있다는 것을 알고 있습니다. 아래와 같이 bash 배열에서 json 배열을 생성하려는 경우. 임의 길이의 인수를 사용하여 이를 수행할 수 있는 방법이 있습니까?

$ jq {some jq arguments} a b c # the bash array can be of an arbitrary length.
["a","b","c"]

입력을 단순하게 하고 싶기 때문에 a, b 및 c는 명령줄에서 인용되지 않습니다.

답변1

임의의 문자열 목록에서 유효한 JSON 배열을 생성하는 두 가지 주요 방법이 있습니다. 하나는 jq옵션 을 사용하는 것입니다 --args.

jq -c -n '$ARGS.positional' --args "${mylist[@]}"

또는 요소가 문자열로 인코딩되지 않은 경우(예: 순수 숫자, 이전에 준비된 JSON 문자열 또는 전체 JSON 개체일 수 있음)

jq -c -n '$ARGS.positional' --jsonargs "${mylist[@]}"

--args--jsonargs해당 인수는 명령줄에서 마지막 항목이어야 합니다 jq.

질문에 표시된 것처럼 -n외부 입력을 읽고 "컴팩트" 출력 형식으로 JSON을 생성하는 비활성화를 사용하고 있습니다 .-c

jo또 다른 방법은 명령줄에서 JSON을 쉽게 생성하기 위해 특별히 설계된 도구인 를 사용하는 것입니다 .

jo -a "${mylist[@]}"

-ajo주어진 인수 로부터 배열을 생성하는 옵션입니다.

도구 jo는 객체 자체의 유형을 추론하므로 다음과 같은 목록이 표시됩니다.

mylist=(1 2 3 4 5 b)

JSON 배열로 변환됩니다.

[1,2,3,4,5,"b"]

관련 정보