JSON을 헤더 "키" 및 "값"이 있는 테이블로 변환

JSON을 헤더 "키" 및 "값"이 있는 테이블로 변환

다음 JSON 출력이 있습니다.

 [
  {
    "enabled": "true",
    "policy_profile": "custom",
    "scan_local_files": "true",
    "local_file_types": "all",
    "scan_network_files": "false",
    "limit_file_size": "false",
    "enable_archive_scanning": "false",
    "scan_boot_sectors": "true",
    "scan_only_new_changes": "true",
    "scan_for_keyloggers": "true",
    "scan_for_puas": "true",
    "deferred_scanning": "true",
    "scan_action_for_infected_files": "Move to quarantine",
    "scan_action_for_infected_files_secondary": "Move to quarantine",
    "scan_action_for_suspect_files": "Move to quarantine",
    "scan_action_for_suspect_files_secondary": "Deny Access"
  }
]

나는 출력을 역 테이블처럼 보이게 만드는 데 어려움을 겪었습니다. 다음과 같이 만들 수 있습니다.

deferred_scanning       enable_archive_scanning enabled limit_archive_size      limit_file_size local_file_types        max_archive_depth       policy_profile  scan_action_for_infected_files  scan_action_for_infected_files_secondary   scan_action_for_suspect_files   scan_action_for_suspect_files_secondary scan_boot_sectors       scan_for_keyloggers     scan_for_puas   scan_local_files  scan_network_files       scan_only_new_changes
-----------------       ----------------------- ------- ------------------      --------------- ----------------        -----------------       --------------  ------------------------------  ----------------------------------------   -----------------------------   --------------------------------------- -----------------       -------------------     -------------   ----------------  ------------------       ---------------------
true    true    true    5       false   all     6       custom  Move to quarantine      Move to quarantine      Move to quarantine      Deny Access     true    true    true    true    false   true

하지만 이건 좀 지저분합니다. 저는 다음과 같은 것을 원합니다:

Attribute           Value
---------           -----
enabled             true
policy_profile      custom
scan_local_files    true
...

이 특정 문제를 다루는 기존 SE 질문에 대한 도움이나 조언을 주시면 대단히 감사하겠습니다.

답변1

이것은 입력 데이터에 작동하는 것 같습니다

jq -r '.[] | to_entries[] | [.key,.value] | @tsv' file.json

출력(탭으로 구분):

enabled true
policy_profile  custom
scan_local_files        true
local_file_types        all
scan_network_files      false
limit_file_size false
enable_archive_scanning false
scan_boot_sectors       true
scan_only_new_changes   true
scan_for_keyloggers     true
scan_for_puas   true
deferred_scanning       true
scan_action_for_infected_files  Move to quarantine
scan_action_for_infected_files_secondary        Move to quarantine
scan_action_for_suspect_files   Move to quarantine
scan_action_for_suspect_files_secondary Deny Access

그런 다음 비교적 간단한 awk도구나 기타 도구를 사용하여 원하는 대로 형식을 지정하세요.

Attribute및 열이 첫 번째 행이 되도록 하려면 Value다음과 같이 명령을 변경하십시오.

jq -r  '[ "Attribute", "Value"], ( .[] | to_entries[] | [.key,.value] ) | @tsv' file.json

인용하다jq: 객체의 각 항목의 키와 값을 인쇄합니다., 방금 소개받았어요 to_entries.

관련 정보