JSON 데이터를 위한 쿼리 언어 JSONPath

모ダン 웹 개발에서 JSON(JavaScript Object Notation)은 데이터 교환의 표준 형식으로 사용되고 있습니다. 그 간결함과 쉬운 가독성으로 인해 널리 환영받고 있지만, 데이터 구조가 복잡해지면서 필요한 정보를 효과적으로 추출하는 방법은 개발자들에게 과제가 되고 있습니다. 이에 JSONPath가 등장했습니다. JSONPath는 JSON 데이터에서 정보를 추출하는 데 도움을 주는 강력한 검색 도구로, 사용자들이 JSON 문서 내부의 데이터를 쉽게 추출할 수 있도록 합니다.

1. JSONPath란 무엇인가?

JSONPath는 JSON 데이터를 위한 쿼리 언어로, XML에서 XPath를 사용하는 것과 유사합니다. 이 언어는 사용자들에게 JSON 문서 내부의 데이터를 탐색하고 추출하는 데에 사용할 수 있는 类路径 구문을 제공합니다. JSONPath의 문법은 간결하고 직관적이기 때문에 복잡한 쿼리도 쉽게 수행할 수 있습니다.

2. JSONPath의 기본 문법

JSONPath는 다음과 같은 문법 요소들을 통해 데이터를 검색합니다:

  • $ : 루트 요소를 나타냅니다.
  • . : 자식 요소에 접근합니다.
  • [] : 배열 요소를 접근하거나 필터링합니다.
  • * : 모든 요소를 나타내는 와일드카드입니다.
  • .. : 모든 하위 요소를 검색합니다.
  • ?() : 필터링 조건을 지정합니다.

3. JSONPath의 장점

  • 간결함 : JSONPath의 문법은 간결하고 쉬워 누구나 쉽게 배울 수 있습니다.
  • 유연성 : 복잡한 쿼리와 필터링 작업을 지원하며 다양한 JSON 구조를 처리할 수 있습니다.
  • 넓은 호환성 : 여러 프로그래밍 언어와 도구에서 지원되고 플랫폼 간의 통합 솔루션으로서 사용할 수 있습니다.

4. 코드 예제

4.1. 종속성 추가

Maven을 사용 중이라면 다음 의존성을 pom.xml에 추가할 수 있습니다:

<dependency>
    <groupId>com.jayway.jsonpath</groupId>
    <artifactId>json-path</artifactId>
    <version>2.8.0</version>
</dependency>

4.2. JsonPath를 사용하여 JSON 분석

다음과 같은 JSON 데이터를 가정합니다:

{
    "store": {
        "book": [
            {
                "category": "fiction",
                "title": "The Great Gatsby",
                "price": 10.99
            },
            {
                "category": "non-fiction",
                "title": "Sapiens",
                "price": 15.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}

다음은 JSONPath를 사용하여 데이터를 추출하는 예제 코드입니다:

package kr.json;

import com.jayway.jsonpath.JsonPath;
import java.util.List;

public class JSONPathExample {
    public static void main(String[] args) {
        String jsonData = "{ \"store\": { \"book\": [ { \"category\": \"fiction\", \"title\": \"The Great Gatsby\", \"price\": 10.99 }, { \"category\": \"non-fiction\", \"title\": \"Sapiens\", \"price\": 15.99 } ], \"bicycle\": { \"color\": \"red\", \"price\": 19.95 } } }";

        // 모든 책 제목 추출
        List<String> titles = JsonPath.read(jsonData, "$.store.book[*].title");
        System.out.println("책 제목: " + titles);

        // 15보다 싼 책 추출
        List<Object> discountBooks = JsonPath.read(jsonData, "$.store.book[?(@.price < 15)]");
        System.out.println("할인 책: " + discountBooks);

        // 스토어 내 모든 가격 추출
        List<Double> prices = JsonPath.read(jsonData, "$.store..price");
        System.out.println("가격: " + prices);
    }
}

4.3. 분석 결과

  • 모든 책 제목 추출 : $.store.book[*].title 경로를 사용하여 모든 책의 제목을 반환합니다.
  • 15보다 싼 책 추출 : $.store.book[?(@.price < 15)] 경로를 사용하여 15보다 싼 책을 반환합니다.
  • 스토어 내 모든 가격 추출 : $.store..price 경로를 사용하여 스토어 내 모든 가격을 반환합니다.

더 많은 코드 예제는 아래 저장소에서 확인할 수 있습니다.

코드 저장소

  • (jsonpath)

5. 테스트

  • 모든 책 제목 추출 :
  • JSONPath: $.store.book[*].title
  • 결과: ["The Great Gatsby", "Sapiens"]
  • 15보다 싼 책 추출 :
  • JSONPath: $.store.book[?(@.price < 15)]
  • 결과: [{"category": "fiction", "title": "The Great Gatsby", "price": 10.99}]
  • 스토어 내 모든 가격 추출 :
  • JSONPath: $.store..price
  • 결과: [10.99, 15.99, 19.95]

태그: JSONPath java JSON

7월 15일 06:12에 게시됨