다음을 통해 공유


JSON 경로 식(SQL Server)

적용 대상:SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스Azure SQL Managed InstanceAzure Synapse Analytics (서버리스 SQL 풀 한정)

JSON 경로 식을 사용하여 JSON 개체의 속성을 참조합니다.

다음 함수를 호출할 때 경로 식을 제공해야 합니다.

  • OPENJSON을 호출하여 JSON 데이터의 관계형 뷰를 만드는 경우.
  • JSON_VALUE 호출하여 JSON 텍스트에서 값을 추출하는 경우.
  • JSON 개체 또는 배열을 추출하기 위해 JSON_QUERY 를 호출하는 경우.
  • JSON_MODIFY 호출하여 JSON 문자열의 속성 값을 업데이트하는 경우.

경로 식의 일부

경로 식에는 두 가지 구성 요소가 있습니다.

  1. 값이 또는 lax인 선택적 strict입니다.

  2. 경로 그 자체.

PATH 모드

경로 식의 시작 부분에서 선택적으로 키워드 lax 를 지정하여 경로 모드를 선언합니다 strict. 기본값은 lax입니다.

  • 모드에서 lax 함수는 경로 식에 오류가 포함된 경우 빈 값을 반환합니다. 예를 들어 값을 $.name요청하고 JSON 텍스트에 키가 없는 name 경우 함수는 null을 반환하지만 오류가 발생하지 않습니다.

  • 모드에서 strict 이 함수는 경로 식에 오류가 포함된 경우 오류를 발생합니다.

다음 쿼리는 경로 식의 lax 모드를 명시적으로 지정합니다.

DECLARE @json AS NVARCHAR (MAX);

SET @json = N'{ ... }';

SELECT *
FROM OPENJSON (@json, N'lax $.info');

경로

선택적 경로 모드 선언 후에 경로 자체를 지정합니다.

  • 달러 기호($)는 컨텍스트 항목을 나타냅니다.

  • 속성 경로는 경로 단계의 집합입니다. 경로 단계는 다음 요소와 연산자를 포함할 수 있습니다.

    • 키 이름. 예를 들어 $.name$."first name"를 지정합니다. 키 이름이 달러 기호로 시작되거나 공백 또는 점 연산자(.)와 같은 특수 기호를 포함하는 경우, 따옴표로 묶습니다.

    • 배열 요소. 예들 들어 $.product[3]입니다. 배열은 0부터 시작됩니다.

    • 점 연산자(.)는 개체의 멤버를 나타냅니다. 예를 들어 $.people[1].surname에서 surnamepeople의 자식입니다.

    • 입력이 JSON 형식 값인 경우에도 배열 와일드카드 및 범위 검색이 지원됩니다.

배열 관련 와일드카드 및 범위 지원

참고 항목

배열 와일드카드 및 범위 지원은 현재 미리 보기로 제공되며 SQL Server 2025(17.x) 미리 보기에서만 사용할 수 있습니다.

SQL Server 2025(17.x) 미리 보기는 배열 와일드카드를 지원하도록 ANSI SQL/JSON 경로 식을 확장합니다. 배열 와일드카드를 사용하면 모든 요소, 요소 범위, 요소 목록 또는 특수 토큰 "last"를 지정하여 JSON 배열의 마지막 값을 나타낼 수 있습니다. SQL/JSON 배열은 0부터 시작하는 인덱스를 사용합니다. 와일드카드가 있는 SQL/JSON 경로는 JSON_QUERY, JSON_PATH_EXISTSJSON_CONTAINS 사용할 수 있습니다.

함수는 SQL/JSON 경로 식을 지원하지만 JSON_VALUE 함수의 JSON_VALUE 반환 값은 SQL 스칼라이므로 함수는 항상 JSON 개체 또는 배열을 가리키는 모든 SQL/JSON 경로에 대해 반환 NULL 합니다. 배열 와일드카드는 입력이 json 형식인 경우에만 지원됩니다.

다음 구문에서는 와일드카드, 범위 및 특수 토큰 last 을 사용하는 방법을 보여 줍니다.

path[elements ]

elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}

숫자 값 대신 특수 토큰 last 을 사용할 수 있습니다. 범위를 지정하는 경우 범위를 순서대로 지정해야 합니다.

몇 가지 유효한 SQL/JSON 경로 식의 예:

경로 설명
$[*] 모든 요소
$[0] 첫 번째 요소
$[0 to 2] 처음 세 가지 요소
$[last] 마지막 요소
$[last, 0] 잘못됨
$[last, 2, 0, last] 잘못됨
$.creditcards[0].type 배열에서 첫 번째 요소의 type 속성 값을 반환합니다.creditcards
$.credit_cards[*].type 배열에 있는 모든 요소의 type 속성 값을 반환합니다.creditcards
$.credit_cards[0, 2].type 배열에서 첫 번째 요소와 세 번째 요소의 type 속성 값을 반환합니다.creditcards
$.credit_cards[1 to 3].type 배열에서 두 번째에서 네 번째 요소의 type 속성 값을 반환합니다.creditcards
$.credit_cards[last].type 배열에서 마지막 요소의 type 속성 값을 반환합니다.creditcards
$.credit_cards[last, 0].type 배열에서 마지막 요소와 첫 번째 요소 creditcards 의 type 속성 값을 반환합니다.

예제

이 섹션의 예제에서는 다음 JSON 텍스트를 참조합니다.

{
    "people": [{
        "name": "John",
        "surname": "Doe"
    }, {
        "name": "Jane",
        "surname": null,
        "active": true
    }]
}

다음 테이블은 경로 식의 몇 가지 예를 보여줍니다.

경로 식
$.people[0].name John
$.people[1] { "name": "Jane", "surname": null, "active": true }
$.people[1].surname NULL
$ { "people": [ { "name": "John", "surname": "Doe" },{ "name": "Jane", "surname": null, "active": true } ] }
$.people[last].name ["Jane"]
$.people[0 to 1].name ["John","Jane"]
$.people[0, 1].name ["John","Jane"]

기본 제공 함수가 중복 경로를 처리하는 방법

JSON 텍스트에 동일한 수준의 JSON_VALUE 이름이 같은 두 개의 키와 같은 중복 속성이 포함된 경우 함수는 경로와 JSON_QUERY 일치하는 첫 번째 값만 반환합니다. 중복 키가 포함된 JSON 개체를 구문 분석하고 모든 값을 반환하려면 다음 예제와 같이 사용합니다 OPENJSON.

DECLARE @json AS NVARCHAR (MAX);

SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';

SELECT value
FROM OPENJSON (@json, '$.person.info');

SQL Server 및 Azure SQL 데이터베이스에서의 JSON에 대해 알아보기

SQL Server 및 Azure SQL Database의 기본 제공 JSON 지원에 대한 시각적 소개는 다음 비디오를 참조하세요.