한바다
xml을 json과 csv로 변환하기 본문
✅ XML , JSON, CSV 정리
우선 세가지를 구분해서 정리 해보기로 한다!
XML(eXtensible Markup Language) - html태그 형식으로 된 데이터
- 데이터 전송 및 저장을 위해 설계된 마크업 언어
- 태그를 사용하여 데이터 구조화
- 트리구조로 데이터를 표현(계층적 구조)
- 사람이 읽기 쉽고, 기계가 파싱하기 쉬움(파싱이란 복잡한 데이터나 텍스트를 컴퓨터가 이해할 수 있는 형태로 변환하는 것)
- 대용량 데이터 처리에 적합하지만, 구문이 비교적 복잡함
JSON = 자바스크립트 객체 문법으로 데이터를 구조화(JavaScript Object Notation) [ { } ]
- 경량 데이터 교환 형식 : 단순하고 가벼움
- 사람이 읽고 쓰기 쉬우며, 기계가 변환하고 생성하기 쉬움
- 키-값 쌍으로 데이터 표현 객체 기반 구조
- 간결한 문법으로 사람이 읽기 쉽고, 파싱 속도가 빠름
CSV = 엑셀형식으로 이루어진 파일
- 간단한 구조 : 행과 열로 구성된 텍스트 파일
- 대부분 스프레드시트 프로그램에서 지원
- 대용량 데이터 저장에는 적합하지만, 중첩 구조나 복잡한 데이터 표현에는 부적합
- 데이터 형식 비교 -
항목 | XML | JSON | CSV |
구조 | 계층적(트리구조) | 키-값 쌍(객체 기반) | 2차원 테이블(행과 열) |
파일크기 | 비교적 큼 | 작음 | 매우 작음 |
가독성 | 사람이 읽기 쉬움 | 간결하여 읽귀 쉬움 | 매우 간단하지만 중첩 불가 |
사용 용도 | 복잡한 데이터 및 문서 구조화 |
웹 데이터 교환 및 API 응답 | 간단한 데이터 교환 및 저장 |
- 결론-
XML : 복잡한 구조의 데이터에 적합
JSON : 웹 데이터 교환에 최적화
CSV : 간단한 데이터 저장 및 교환에 매우 효율적
✅ XML파일을 JSON 과 CSV 파일로 변환하기
[XML]
<so2Grade/>
<coFlag>통신장애</coFlag>
<khaiValue/>
<so2Value/>
<coValue/>
<pm10Flag>통신장애</pm10Flag>
<o3Grade/>
<pm10Value/>
<khaiGrade/>
<sidoName>서울</sidoName>
<no2Flag>통신장애</no2Flag>
<no2Grade/>
<o3Flag>통신장애</o3Flag>
<so2Flag>통신장애</so2Flag>
<dataTime>2024-08</dataTime>
<coGrade/>
<no2Value/>
<stationName>중구</stationName>
<pm10Grade>1</pm10Grade>
<o3Value/>
</item>
<item>
<so2Grade>1</so2Grade>
<coFlag/>
<khaiValue>73</khaiValue>
<so2Value>0.002</so2Value>
<coValue>0.4</coValue>
<pm10Flag/>
<o3Grade>2</o3Grade>
<pm10Value>32</pm10Value>
<khaiGrade>2</khaiGrade>
<sidoName>서울</sidoName>
<no2Flag/>
<no2Grade>1</no2Grade>
<o3Flag/>
<so2Flag/>
<dataTime>2024-08</dataTime>
<coGrade>1</coGrade>
<no2Value>0.025</no2Value>
<stationName>한강대로</stationName>
<pm10Grade>1</pm10Grade>
<o3Value>0.057</o3Value>
</item>
[JSON 형식]
{
"stationName": "중구",
"dataTime": "2024-08",
"so2Grade": "",
"coFlag": "통신장애",
"khaiValue": "",
"so2Value": "",
"coValue": "",
"pm10Flag": "통신장애",
"o3Grade": "",
"pm10Value": "",
"khaiGrade": "",
"sidoName": "서울",
"no2Flag": "통신장애",
"no2Grade": "",
"o3Flag": "통신장애",
"so2Flag": "통신장애",
"no2Value": "",
"pm10Grade": "1",
"o3Value": ""
},
{
"stationName": "한강대로",
"dataTime": "2024-08",
"so2Grade": "1",
"coFlag": "",
"khaiValue": "73",
"so2Value": "0.002",
"coValue": "0.4",
"pm10Flag": "",
"o3Grade": "2",
"pm10Value": "32",
"khaiGrade": "2",
"sidoName": "서울",
"no2Flag": "",
"no2Grade": "1",
"o3Flag": "",
"so2Flag": "",
"no2Value": "0.025",
"pm10Grade": "1",
"o3Value": "0.057"
}
[CSV 형식]
stationName,dataTime,so2Grade,coFlag,khaiValue,so2Value,coValue,pm10Flag,o3Grade,pm10Value,khaiGrade,sidoName,no2Flag,no2Grade,o3Flag,so2Flag,no2Value,pm10Grade,o3Value
중구,2024-08,,,통신장애,,,통신장애,,1,,서울,통신장애,,통신장애,통신장애,,1,
한강대로,2024-08,1,,73,0.002,0.4,,2,32,2,서울,,1,,,0.025,1,0.057