적용 대상:SQL Server 2016(13.x) 이상
Azure SQL 데이터베이스
Azure SQL Managed Instance
Azure Synapse Analytics (서버리스 SQL 풀 한정)
JSON 경로 식을 사용하여 JSON 개체의 속성을 참조합니다.
다음 함수를 호출할 때 경로 식을 제공해야 합니다.
- OPENJSON을 호출하여 JSON 데이터의 관계형 뷰를 만드는 경우.
- JSON_VALUE 호출하여 JSON 텍스트에서 값을 추출하는 경우.
- JSON 개체 또는 배열을 추출하기 위해 JSON_QUERY 를 호출하는 경우.
- JSON_MODIFY 호출하여 JSON 문자열의 속성 값을 업데이트하는 경우.
경로 식의 일부
경로 식에는 두 가지 구성 요소가 있습니다.
경로 그 자체.
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
에서surname
은people
의 자식입니다.입력이 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_EXISTS 및 JSON_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 지원에 대한 시각적 소개는 다음 비디오를 참조하세요.