😫 문제 상황: VBA로 대용량 JSON을 처리했더니 너무 느려요!
엑셀에서 JSON 데이터를 분석하고 싶을 때, 많은 분들이 VBA를 사용해 처리하려고 시도합니다.
하지만 JSON 파일이 수천 줄 이상으로 커지게 되면, VBA는 그 속도를 따라가지 못합니다.
특히 Scripting.Dictionary 또는 JsonConverter를 사용할 경우, 로딩 자체에 시간이 오래 걸리더라고요.
그래서 대안으로 떠오른 게 바로 PowerShell(. ps1) 스크립트입니다.
Windows에 기본 내장되어 있고, JSON 처리에 굉장히 강력한 기능을 제공합니다.
🧾 사용된 JSON 구조와 필드 설명
이번 작업에 사용된 JSON 데이터의 구조는 아래와 같습니다:
[
{ "a": 1, "b": [ { "c": "Value1", "d": 1 }, { "c": "Value11", "d": 111 } ] },
{ "a": 2, "b": [ { "c": "Value2", "d": 2 }, { "c": "Value12", "d": 112 } ] },
{ "a": 3, "b": [ { "c": "Value3", "d": 3 }, { "c": "Value13", "d": 113 } ] }
]
👉 필드 설명:
- "a": 상위 항목의 고유 번호 (int)
- "b": 하위 항목의 리스트 (배열)
- "c": 우리가 추출하고자 하는 이름값 (string)
- "d": 숫자 형태의 부가 정보 (int)
이번 목표는 모든 b 배열 안의 c 값만 추출하여 결과로 만드는 것이었습니다.
⚙ PowerShell(. ps1) 스크립트 설명
파일 이름: test1.ps1
$jsonPath = "e:\data.json" # JSON 파일 경로
$outputPath = "e:\result.txt" # 결과 출력 파일 경로
# JSON 파일을 읽고 파싱
$json = Get-Content $jsonPath -Raw | ConvertFrom-Json
# 결과 저장할 리스트
$results = @()
# 각 항목에 대해 반복
foreach ($item in $json) {
foreach ($bItem in $item.b) {
$results += $bItem.c # b 항목 안의 c 값만 추출
}
}
# 결과를 텍스트 파일로 저장
$results | Out-File $outputPath -Encoding UTF8
🔍 코드 구성 설명
코드 줄 설명
코드 | 설명 |
$jsonPath = "data.json" | JSON 파일 경로를 정의합니다. 같은 경로에 있으면 파일명만 입력 |
Get-Content -Raw | JSON 파일 내용을 한 줄로 가져옵니다. (중요) |
ConvertFrom-Json | JSON 문자열을 PowerShell 객체로 변환 |
foreach ($item in $json) | 최상위 배열 순회 |
foreach ($bItem in $item.b) | 각 항목의 "b" 배열 순회 |
$bItem.c | 원하는 "c" 값을 추출 |
Out-File | 결과를 UTF-8 형식으로 저장 |
👌 PowerShellISE에서는 Json의 데이터에 맞게 자동완성도 가능하다는 사실!
처음에는 JSON 구조에 맞게 자동완성이 안되지만 1회 실행 후 에는 자동완성도 가능합니다.
아래 이미지처럼 json 구조 중 b는 object로 선택가능하며,
해당 object를 $bitem으로 변수를 설정했기 때문에 b object의 하위 내용이 $bitem. 의 자동 완성도 가능하네요.
💡 왜 PowerShell이 유리한가?
- 대용량 처리에 훨씬 빠릅니다 (수천~수만 줄도 수 초 내 처리)
- 윈도에서 별도 프로그램 없이 실행 가능
- UTF-8 출력도 간단히 지원
- 엑셀과 연동하거나 VBA에서 호출도 가능합니다
📂 샘플 파일 다운로드
아래 압축 파일에는 실습용 JSON 파일과. ps1 스크립트가 포함되어 있습니다.
🧾 참고 사항
PowerShell 권한 획득 하기
PS1을 실행하기 전 반드시 권한을 획득해야 합니다.
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
해당 명령어를 실행하면 아래 이미지와 같이 노출되며, 모두 예 선택하여 진행하면 됩니다.
PowerShell 실행
PowerShell을 실행하여도 되고, PowerShell ISE를 실행하셔도 됩니다. (저는 ISE를 사용했습니다.)
혹은 Win+R 선택 후 PowerShell을 입력하여도 됩니다.
'컴퓨터 > 기타' 카테고리의 다른 글
Windows10 USB플래시 드라이브 0x8007000D-0x90002 에러 처리 (0) | 2023.07.17 |
---|---|
윈도우10 갑짜기 마이크가 안될 때 - 마이크 액세스 (1) | 2021.10.12 |
윈도우 환경변수 내용 정리 (0) | 2021.07.19 |
구글의 어마 무시한 위치 기록 데이터 (0) | 2021.07.09 |
윈도우10 특정 파일 사진 , 동영상만 미리보기가 안나올 때 (0) | 2021.06.25 |
댓글