데이터 형식·구조화 데이터
긴 API 응답에서 필요한 항목만 추출하기
사용할 도구
API 응답의 상품 이름을 회의 메모로 옮기려 합니다. name 검색은 편하지만 중간에 고객 name이 나오거나 한 상품에 필드가 빠져 있으면 수작업이 위험해집니다. 필드 이름과 소속 위치를 함께 지정하면 좋습니다.
가상 상품 목록으로 실험합니다. JSONPath는 지정 위치의 값을 선택하며 원본을 고칠 필요가 없습니다. 복잡한 식부터 쓰기보다 전체, 목록, 한 항목, 이름 순서로 좁히면 빈 결과의 원인도 찾기 쉽습니다.
URL이 아닌 이미 받은 본문 준비하기
이 도구는 API 클라이언트가 아닙니다. 붙인 URL을 가져오거나 로그인하거나 다음 페이지를 찾지 않습니다. 응답 본문의 JSON 부분만 입력하세요. HTTP 상태 줄과 헤더는 JSON이 아닙니다. 예제 공유 시 실제 이름이나 토큰이 있는 운영 응답 대신 같은 구조의 가상 데이터를 쓰면 재현과 설명이 쉽습니다.
결과는 입력한 데이터에 대한 것이며 실시간 API가 아닙니다. 서버가 갱신되어도 자동 최신화되지 않습니다. 최신성이 중요하면 어떤 응답을 검사했는지 작업 기록에 남기세요. 원본 확보와 입력 JSON 추출은 별도 단계입니다.
상품명과 담당자명이 함께 있는 데이터 준비
{"items":[{"id":"A","name":"Notebook","price":500},{"id":"B","name":"Pencil","price":120},{"id":"C","name":null,"price":300}],"owner":{"name":"Demo team"},"page":1}JSONPath 추출 도구의 JSON 칸에 예제를 넣고 별도 식 입력란에 $만 넣어 실행하세요. 문서 전체가 결과 하나로 선택됩니다. 여기서 실패하면 식을 복잡하게 만들기 전에 괄호와 따옴표를 확인하세요. 식을 JSON 뒤에 이어 붙이면 유효한 JSON 문서가 아니므로 입력란을 구분합니다.
결과 바깥의 배열은 원본이 배열로 바뀌었다는 뜻이 아닙니다. 이 도구는 선택한 값의 목록을 반환합니다. 전체 문서를 선택하면 원소 하나인 결과 목록이 됩니다. 이 래퍼와 원래 items 배열을 구별하면 나중의 이중 대괄호도 이해하기 쉽습니다.
첫 항목에서 이름으로 범위 좁히기
$.items[0].name["Notebook"]$는 문서, items는 그 아래 목록, [0]은 첫 항목, name은 그 상품의 필드입니다. 인덱스는 1이 아니라 0부터입니다. [1]은 Pencil, [2]는 null을 선택합니다. 숫자를 바꿀 때 원본 위치와 대조하면 식 암기보다 경로 이해에 도움이 됩니다.
전체 경로로 값이 안 나오면 $.items, $.items[0] 순서로 시험하세요. 대소문자를 포함해 원본의 필드명을 정확히 써야 합니다. items와 Items를 추측하지 말고 원문을 확인하세요. 빈 결과만으로 JSON 필드명을 바꿀 필요는 없습니다.
반복 복사를 *로 바꾸기
$.items[*].name["Notebook","Pencil",null][0]을 [*]로 바꾸면 목록의 모든 항목에 같은 선택을 적용합니다. items 내부만 대상으로 하므로 owner.name은 제외됩니다. 텍스트 검색과 달리 '상품 목록의 이름'이라는 조건이 식에 남습니다. 같은 구조의 응답에 반복 적용하거나 설명하기 쉽습니다.
결과 세 개가 서버 전체 상품 세 개를 뜻하지는 않습니다. 예제에 page가 있어도 도구는 다음 페이지를 가져오지 않습니다. 입력한 응답만 검사합니다. 전체 추출이 필요하면 원본 API의 페이지 나눔과 개수 제한을 별도로 확인하세요.
[]와 [null]은 모두 비어 보이지만 다릅니다
$.items[2].name은 세 번째 항목의 name 값이 null이므로 [null]입니다. $.items[3].name은 네 번째 항목이 없어 []입니다. 하나는 값을 하나 선택했고 다른 하나는 아무것도 선택하지 못했습니다. 둘 다 '값이 null'이라고 보고하면 명시적 null과 누락을 구별할 수 없습니다.
{"items":[]}이 별도 문서에서 $.items는 빈 배열이라는 값 하나를 선택하므로 [[]]입니다. $.items[*]는 배열 안에 요소가 없어 []입니다. 괄호 수만 세기보다 무엇을 값 하나로 선택했는지 생각하세요. 빈 결과 자체가 식 오류는 아닙니다.
이름과 가격을 따로 뽑으면 대응이 어긋날 수 있습니다
{"items":[{"id":"A","name":"Notebook","price":500},{"id":"B","price":120},{"id":"C","name":"Eraser","price":300}]}이름은 Notebook과 Eraser 두 개, 가격은 500, 120, 300 세 개가 나옵니다. 두 번째 이름과 가격을 붙이면 Eraser 가격을 120으로 잘못 연결합니다. 없는 필드 자리에 빈칸이 자동으로 들어간다고 가정하지 마세요. 결과 개수 차이에는 의미가 있습니다.
관계를 보존하려면 $.items[*]로 상품 객체 전체를 선택하고 id도 확인하세요. 표로 옮길 때도 별개 목록을 행 번호로 붙이지 말고 같은 객체의 필드를 열로 변환하세요. JSON–CSV 변환에서는 누락 필드와 null 처리도 확인해야 합니다.
어디에나 있는 name 검색은 구조 조사용
$..name첫 JSON으로 돌아가 이 식을 실행하면 Demo team도 나옵니다. 깊이를 모르는 같은 이름의 필드를 찾기에는 편하지만 값만 보면 출처가 불분명합니다. 조사할 때 넓게 검색하고 위치를 알면 $.items[*].name으로 좁히세요.
불필요하게 큰 입력에 광범위한 재귀 검색을 쓰지 마세요. 결과 개수 등의 한도가 있으며 초과해도 축약된 완전한 결과를 보장하지 않습니다. 작은 대표 예제로 식을 확인한 뒤 실제 입력에 적용하면 선택 오류와 처리량 문제를 구분하기 쉽습니다.
온라인 예제가 안 되면 지원 문법 확인하기
JSONPath에는 표준 규격과 구현별 확장이 있습니다. SheepDev는 임의 코드 평가를 끄고 필터·스크립트 식을 거부합니다. 다른 사이트의 가격 조건식을 그대로 쓸 수 있다고 가정하지 마세요. 미지원 식의 실패는 조건에 맞는 상품이 없다는 뜻이 아닙니다.
추출 후 원본 범위, 선택 필드, 결과 개수를 확인하세요. 결과 전달 시 식과 범위를 함께 적으세요. '상품명 두 개'보다 '이 페이지 items에서 존재하는 name 값 두 개 추출'이 누락이나 다른 계층 혼입을 추적하기 쉽습니다.