$ 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[@]}"
-a
jo
주어진 인수 로부터 배열을 생성하는 옵션입니다.
도구 jo
는 객체 자체의 유형을 추론하므로 다음과 같은 목록이 표시됩니다.
mylist=(1 2 3 4 5 b)
JSON 배열로 변환됩니다.
[1,2,3,4,5,"b"]