쉘 스크립트를 사용하여 Json을 테이블 형식으로 변환

쉘 스크립트를 사용하여 Json을 테이블 형식으로 변환

sfdx 차이|티 결과.json;

여기에서는 json 형식의 결과/응답을 얻고 이를 result.json 파일에 추가합니다. 아래는 내가 얻는 json입니다.

{
  "status": 3,
  "result": {
    "source": {
      "type": "folder",
      "origin": "/source"
    },
    "target": {
      "type": "folder",
      "origin": "/target"
    },
    "difs": [
      {
        "type": "In Progress",
        "entity": "Phone",
        "result": "added"
      },
      {
        "type": "Completed",
        "entity": "SMS",
        "result": "added"
      },
      {
        "type": "Scheduled",
        "entity": "Web",
        "result": "added"
      }
    ]
  }
}

표 형식으로 표시해야 합니다. 여기에 이미지 설명을 입력하세요.

우리가 이것을 할 수 있는 방법이 있나요? 저는 쉘 스크립팅을 처음 접하므로 도와주세요.

답변1

현재 질문의 JSON 문서가 주어지면 다음 jq명령은 이를 테이블 헤더를 포함하여 표시된 테이블 형식에 해당하는 CSV 형식으로 변환합니다.

jq -r '["Status","Value","Result"],
    (.result.difs[] | [.type,.entity,.result]) | @csv' file.json

먼저 CSV로 변환해야 하는 각 행에 대한 값 배열을 만든 다음 내장 연산자를 사용하여 @csv적절하게 참조되는 CSV 데이터를 만듭니다.

샘플 JSON 문서가 주어지면 출력은 다음과 같습니다.

"Status","Value","Result"
"In Progress","Phone","added"
"Completed","SMS","added"
"Scheduled","Web","added"

나중에 테이블을 만드는 데 사용하려는 스프레드시트 프로그램으로 가져올 수 있습니다.

cvslook명령줄 CSV 구문 분석 도구 툴킷을 사용하여 이를 후처리하면 csvkit테이블의 Markdown 변형을 얻을 수 있습니다.

jq -r '["Status","Value","Result"],
    (.result.difs[] | [.type,.entity,.result]) | @csv' file.json |
csvlook

이것은 출력됩니다

| Status      | Value | Result |
| ----------- | ----- | ------ |
| In Progress | Phone | added  |
| Completed   | SMS   | added  |
| Scheduled   | Web   | added  |

마크다운으로 렌더링하면 다음과 같습니다.

상태 결과
진행 중 전화 다음에 추가
충분히 짧은 메시지 다음에 추가
예약하다 회로망 다음에 추가

관련 정보