데이터 추출 가이드: JSON & XML
데이터 추출 가이드: JSON & XML
이 문서는 복잡해 보이는 데이터 묶음인 JSON과 XML에서, 사용자가 원하는 정보만 정확하고 쉽게 골라내는 방법을 안내합니다.
먼저 아래의 핵심 문법 요약을 통해 전체적인 사용법을 빠르게 파악할 수 있습니다. 각 문법에 대한 자세한 설명과 활용 사례는 문서 하단의 상세 가이드에서 단계별로 학습할 수 있습니다.
1. 핵심 문법 요약 (Cheat Sheet)
바쁜 사용자를 위해 JSONPath와 XML 추출 문법의 핵심 기능만 모아두었습니다.
1) JSONPath 핵심 문법
$
루트(Root): 데이터 전체의 시작점을 의미합니다.
$
.
하위 접근: 특정 항목 내부의 값에 접근합니다.
$.user.name
[*]
배열 전체(Wildcard): 목록(배열)의 모든 요소를 선택합니다.
$.products[*]
[숫자]
배열 인덱스: 목록(배열)에서 특정 순서의 요소를 선택합니다. (0부터 시작)
$.products[0]
2) XML 추출 핵심 문법
element
요소 선택: 추출할 데이터가 담긴 XML 요소(Element)의 이름을 지정합니다.
item
|
컬럼 지정: 선택한 요소 내부에서 가져올 하위 요소들을 지정합니다.
item | title, author
as
별칭(Alias) 지정: 추출한 데이터의 컬럼(표의 제목) 이름을 변경합니다.
title as 제목
;
옵션 구분: 여러 옵션(조건, 정렬 등)을 연결할 때 사용합니다.
... ; limit 10
where
조건 필터링: 특정 조건을 만족하는 데이터만 필터링합니다.
where brand=Apple
order by
데이터 정렬: 지정한 기준에 따라 데이터를 정렬합니다. (asc: 오름차순, desc: 내림차순)
order by price desc
limit
개수 제한: 가져올 데이터의 최대 개수를 제한합니다.
limit 5
2. 상세 가이드: JSON 데이터 추출 (JSONPath)
JSON은 { "키": "값" }
형태로 데이터를 정리하는 방식입니다. 마치 각 정보에 '이름표'가 붙어있는 서랍장과 같습니다. JSONPath는 이 서랍장에서 원하는 물건을 찾기 위한 '주소' 역할을 합니다.
1단계: 기본 항목 추출
가장 기본적인 데이터 구조에서 특정 값을 가져옵니다.
예시 데이터:
{ "name": "홍길동", "age": 25, "city": "서울" }
$.name
→ 결과:"홍길동"
$.age
→ 결과:25
2단계: 중첩된 객체 항목 추출
객체 안에 또 다른 객체가 있는 중첩된 구조에서 값을 가져옵니다. .
을 사용하여 단계별로 접근합니다.
예시 데이터:
{ "user": { "profile": { "name": "김철수", "email": "[email protected]" } } }
$.user.profile.name
→ 결과:"김철수"
해설:
user
객체 안의profile
객체 안의name
값을 의미합니다.
3단계: 배열(목록) 데이터 다루기
[]
기호로 묶인 데이터 목록을 배열이라고 합니다. 배열 전체를 가져오거나, 특정 순서의 값만 가져올 수 있습니다.
예시 데이터:
{ "fruits": ["사과", "바나나", "오렌지"] }
배열 전체 가져오기:
$.fruits[*]
→ 결과:["사과", "바나나", "오렌지"]
특정 순서의 값 가져오기: 컴퓨터는 숫자를 0부터 셉니다.
$.fruits[0]
→ 결과:"사과"
(첫 번째 항목)$.fruits[2]
→ 결과:"오렌지"
(세 번째 항목)
4단계: 객체 배열에서 특정 값 추출하기
객체(서랍 칸)들이 배열(목록) 형태로 여러 개 있을 때, 모든 객체에서 공통된 항목의 값들만 추출할 수 있습니다.
예시 데이터:
{ "users": [ { "id": 1, "name": "홍길동" }, { "id": 2, "name": "김영희" } ] } ```* **모든 사용자의 이름 추출**: `$.users[*].name` → 결과: `["홍길동", "김영희"]`
해설:
users
배열의 모든(*
) 항목에 접근하여, 각 항목의name
값을 가져오라는 의미입니다.
3. 상세 가이드: XML 데이터 추출
XML은 <이름표>내용</이름표>
형태로 데이터의 시작과 끝을 감싸서 구조를 표현하는 방식입니다. 이 이름표(Element)를 기준으로 원하는 정보를 추출하여 표 형태로 정리할 수 있습니다.
1단계: 기본 요소 및 컬럼 선택
가장 기본적으로 특정 요소(element
)를 선택하고, 그 안에서 원하는 하위 요소(column
)들을 가져옵니다.
예시 데이터:
<products> <product> <name>무선 이어폰</name> <price>89000</price> </product> <product> <name>블루투스 스피커</name> <price>156000</price> </product> </products>
product | name, price
:product
요소 안의name
과price
를 추출합니다.
2단계: 컬럼명 변경하기 (as)
추출한 데이터 표의 제목(컬럼명)을 더 이해하기 쉬운 이름으로 변경할 수 있습니다.
product | name as 상품명, price as 가격
:name
은 '상품명'으로,price
는 '가격'으로 컬럼명이 변경되어 표시됩니다.
3단계: 조건부 필터링 (where)
원하는 조건에 맞는 데이터만 골라서 가져올 수 있습니다.
예시 데이터:
<products> <product> <name>iPhone 15</name> <brand>Apple</brand> </product> <product> <name>Galaxy S24</name> <brand>Samsung</brand> </product> </products>
product | name; where brand=Apple
:brand
가 'Apple'인product
의name
만 추출합니다. → 결과:iPhone 15
4단계: 데이터 정렬 및 개수 제한 (order by, limit)
추출한 결과를 특정 기준에 따라 정렬하거나, 가져올 개수를 제한할 수 있습니다.
예시: 발행일(pubDate)을 기준으로 최신순(내림차순,
desc
)으로 정렬하여 상위 5개만 가져오고 싶을 때item | title, pubDate; order by pubDate desc; limit 5
해설:
item
요소에서title
과pubDate
를 선택합니다.pubDate
를 기준으로 내림차순(desc
) 정렬합니다.정렬된 결과 중 위에서부터 5개(
limit 5
)만 최종 결과로 보여줍니다.
Last updated