Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 JSON Pointer로 JSON 키 값을 가져오는 방법

JSON Pointer는 JSON 문서 내에서 특정 키 값에 접근할 수 있도록 문자열 구문(string syntax)을 정의하는 표준입니다. Json 클래스의 정적 팩토리 메서드인 createPointer()를 호출하면 JSONPointer 인스턴스를 생성할 수 있습니다.

JSON Pointer에서 모든 문자열 구문은 반드시 "/"(슬래시)로 시작해야 한다는 점에 유의하세요. 생성한 JsonPointer 객체에 대해 getValue() 메서드를 호출하면 해당 키의 값을 손쉽게 가져올 수 있습니다.

JSON 파일

아래 예제에서 사용되는 simple.json 파일에는 이름, 나이, 주소, 전화번호 목록이 포함되어 있습니다.

예제 코드

import javax.json.*;
import java.io.*;

public class JsonPointerTest {
    public static void main(String[] args) throws Exception {
        JsonReader jsonReader = Json.createReader(new FileReader("simple.json"));
        JsonStructure jsonStructure = jsonReader.read();

        // firstName 키의 값 가져오기
        JsonPointer jsonPointer1 = Json.createPointer("/firstName");
        JsonString jsonString = (JsonString) jsonPointer1.getValue(jsonStructure);
        System.out.println("First Name: " + jsonString.getString());

        // phoneNumbers 배열 전체 가져오기
        JsonPointer jsonPointer2 = Json.createPointer("/phoneNumbers");
        JsonArray array = (JsonArray) jsonPointer2.getValue(jsonStructure);
        System.out.println("Phone Numbers:");
        for (JsonValue value : array) {
            JsonObject objValue = (JsonObject) value;
            System.out.println(objValue.toString());
        }

        // 배열 인덱스를 이용해 두 번째 전화번호 객체 가져오기
        JsonPointer jsonPointer3 = Json.createPointer("/phoneNumbers/1");
        JsonObject jsonObject1 = (JsonObject) jsonPointer3.getValue(jsonStructure);
        System.out.println("Home: " + jsonObject1.toString());

        // 빈 문자열 포인터로 JSON 전체 구조 가져오기
        JsonPointer jsonPointer4 = Json.createPointer("");
        JsonObject jsonObject2 = (JsonObject) jsonPointer4.getValue(jsonStructure);
        System.out.println("JSON:\n" + jsonObject2.toString());

        jsonReader.close();
    }
}

실행 결과

First Name: Raja
Phone Numbers:
{"Mobile":"9959984000"}
{"Home":"0403758000"}
Home: {"Home":"0403758000"}
JSON:
{"firstName":"Raja","lastName":"Ramesh","age":30,"streetAddress":"Madhapur","city":"Hyderabad","state":"Telangana","phoneNumbers":[{"Mobile":"9959984000"},{"Home":"0403758000"}]}

핵심 정리

위 예제에서 확인할 수 있듯이 JSON Pointer는 다양한 방식으로 활용할 수 있습니다.

1. 단일 키 접근: "/firstName"처럼 경로를 지정하면 해당 키의 값을 반환합니다.
2. 배열 요소 접근: "/phoneNumbers/1"처럼 인덱스 번호를 사용하면 배열의 특정 요소에 접근할 수 있습니다. 인덱스는 0부터 시작합니다.
3. 전체 문서 접근: 빈 문자열("")을 포인터로 사용하면 JSON 문서 전체 구조를 가져올 수 있습니다.

이처럼 JSON Pointer를 활용하면 복잡한 JSON 구조에서도 원하는 데이터를 간결하고 직관적인 경로 표현으로 쉽게 조회할 수 있습니다.