JQ를 사용하여 배열의 JSON을 헤더가 있는 CSV로 변환

JQ를 사용하여 배열의 JSON을 헤더가 있는 CSV로 변환

Json을 열 ID 및 배열로 가져오고 있습니다.

  {
      "ObjectID": [
        0,
        1,
        2,
        3,
        4
      ],
      "Name": [
        "Apple",
        "Orange",
        "Grape",
        "Banana",
        "Jackfruit"
      ],
      "Color": [
        "Red",
        "Orange",
        "Green",
        "Yellow",
        "null"
      ],
      "Acidity": [
        3.9,
        3.5,
        2.99,
        6,
        5.0
      ]
    }

다음과 같은 jq를 사용하여 일반 CSV 형식으로 변환하려고 합니다.

ObjectID,Name,Color,Acidity
0,Apple,Red,3.9
1,Orange,Orange,3.5
2,Grape,Green,2.99
3,Banana,Yellow,6
4,Jackfruit,null,5.0

관련 질문JQ를 사용하여 JSON을 헤더와 함께 CSV로 내보내기 . 일반적인 답변을 찾는 것이 좋습니다.

답변1

주어진 답변을 가지고 놀고 나서 내 자신의 질문에 대답하기, json 배열에 대한 일반적인 솔루션

jq --raw-output 'to_entries|map(.key),(map(.value)|transpose[])|@csv'   

답변2

이 기능을 사용한 솔루션 transpose:

<file jq -r '(to_entries|map(.key)),([.ObjectID,.Name,.Color,.Acidity]|transpose|.[])|@csv'

개체 이름을 추출하는 데 사용합니다 to_entries|map(.key).

객체 내용은 배열에 저장되고 transposed는 각 객체 요소를 포함하는 배열을 얻습니다.

그런 다음 결과는 @csv연산자를 사용하여 배열에서 쉼표로 구분된 문자열로 변환됩니다.

관련 정보