jq를 사용하여 JSON 배열에 쉼표로 구분된 목록 필드 만들기

jq를 사용하여 JSON 배열에 쉼표로 구분된 목록 필드 만들기

jq을 사용하여 JSON 배열 내의 값을 쉼표로 구분된 한 줄의 목록으로 연결하려고 합니다 . (후행 쉼표 없음)

{
  "hardware": [
    "abc",
    "def",
    "ghi"
  ]
}

"abc, def, ghi" 생성

다음을 사용하여 값을 함께 연결할 수 있습니다.

jq -jr '(.hardware[])' input.json

abcdefghi

쉼표와 공백을 삽입해 보았지만 작동하지 않습니다.

jq -jr '(.hardware[]|join(", ")' 

jq: error: syntax error, unexpected $end (Unix shell quoting issues?) at <top-level>, line 1:

(.hardware[]|join(", ")

누구든지 사용할 올바른 구문을 알려줄 수 있습니까?

감사해요

시가 전차

답변1

당신이 찾고있는

jq -r '.hardware | join(", ")'

게시하신 버전의 구문 오류는 처음에 (일치하는 항목이 없기 때문에 발생 )하지만 어쨌든 join모든 값을 한 번에 제공해야하므로 (한 번에 하나의 값을 전달하는 것) .hardware보다 낫습니다 ..hardware[]

답변2

표현식 jq에 불균형 괄호가 포함되어 있습니다. 또한 이 join()함수는 단일 값이 아닌 배열을 기대합니다( .hardware | join(", ")대신 사용 .hardware[] | join(", ")).

올바른 형식의 CSV 출력을 원하면 다음 표현식을 사용할 수 있습니다 .hardware | @csv.

$ jq -r '.hardware | @csv' file.json
"abc","def","ghi"

관련 정보