적용 대상: MICROSOFT Fabric Preview의 SQL Server 2016(13.x) 이상 버전
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics(서버리스 SQL 풀에만 해당)
SQL 데이터베이스
JSON 경로 식을 사용하여 JSON 개체의 속성을 참조합니다.
다음 함수를 호출할 때 경로 식을 제공해야 합니다.
- OPENJSON을 호출하여 JSON 데이터의 관계형 뷰를 만드는 경우
- JSON_VALUE 호출하여 JSON 텍스트에서 값을 추출하는 경우
- JSON_QUERY 호출하여 JSON 개체 또는 배열을 추출하는 경우
- JSON_MODIFY 호출하여 JSON 문자열의 속성 값을 업데이트하는 경우
경로 식의 일부
경로 식에는 두 가지 구성 요소가 있습니다.
경로 자체입니다.
Path mode
경로 식의 시작 부분에서 선택적으로 키워드 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');
Path
선택적 경로 모드 선언 후에 경로 자체를 지정합니다.
달러 기호(
$
)는 컨텍스트 항목을 나타냅니다.속성 경로는 경로 단계의 집합입니다. 경로 단계는 다음 요소와 연산자를 포함할 수 있습니다.
Key names. 예를 들어
$.name
및$."first name"
를 지정합니다. 키 이름이 달러 기호로 시작되거나 공백 또는 점 연산자(.
)와 같은 특수 기호를 포함하는 경우, 따옴표로 묶습니다.Array elements. 예들 들어
$.product[3]
입니다. 배열은 0부터 시작됩니다.점 연산자(
.
)는 개체의 멤버를 나타냅니다. 예를 들어$.people[1].surname
에서surname
은people
의 자식입니다.입력이 JSON 형식 값인 경우에도 배열 와일드카드 및 범위 검색이 지원됩니다.
배열 관련 와일드카드 및 범위 지원
Note
배열 와일드카드 및 범위 지원은 현재 미리 보기로 제공되며 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 경로 식의 예:
Path | Description |
---|---|
$[*] |
All elements |
$[0] |
First element |
$[0 to 2] |
처음 세 가지 요소 |
$[last] |
Last element |
$[last, 0] |
Invalid |
$[last, 2, 0, last] |
Invalid |
$.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 속성 값을 반환합니다. |
Examples
이 섹션의 예제에서는 다음 JSON 텍스트를 참조합니다.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
다음 테이블은 경로 식의 몇 가지 예를 보여줍니다.
Path expression | Value |
---|---|
$.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');
JSON에 대해 자세히 알아보기
기본 제공 JSON 지원에 대한 시각적 소개는 다음 비디오를 참조하세요.