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"