JSON 경로 식(SQL Server)JSON Path Expressions (SQL Server)

이 항목 적용 대상: 예SQL Server예Azure SQL 데이터베이스없습니다Azure SQL 데이터 웨어하우스 없습니다 병렬 데이터 웨어하우스THIS TOPIC APPLIES TO: yesSQL ServeryesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

JSON 경로 식을 사용하여 JSON 개체의 속성을 참조합니다.Use JSON path expressions to reference the properties of JSON objects.

다음 함수를 호출하는 경우 경로 식을 제공해야 합니다.You have to provide a path expression when you call the following functions.

  • JSON 데이터의 관계형 뷰를 만들기 위해 OPENJSON 을(를) 호출하는 경우.When you call OPENJSON to create a relational view of JSON data. 자세한 내용은 OPENJSON(Transact-SQL)을 참조하세요.For more info, see OPENJSON (Transact-SQL).

  • JSON 텍스트에서 값을 추출하기 위해 JSON_VALUE 를 호출하는 경우.When you call JSON_VALUE to extract a value from JSON text. 자세한 내용은 JSON_VALUE(Transact-SQL)을 참조하세요.For more info, see JSON_VALUE (Transact-SQL).

  • JSON 개체 또는 배열을 추출하기 위해 JSON_QUERY 를 호출하는 경우.When you call JSON_QUERY to extract a JSON object or an array. 자세한 내용은 JSON_QUERY(Transact-SQL)을 참조하세요.For more info, see JSON_QUERY (Transact-SQL).

  • JSON 문자열에서 속성의 값을 업데이트하기 위해 JSON_MODIFY를 호출하는 경우.When you call JSON_MODIFY to update the value of a property in a JSON string. 자세한 내용은 JSON_MODIFY(Transact-SQL)을 참조하세요.For more info, see JSON_MODIFY (Transact-SQL).

경로 식의 요소Parts of a path expression

경로 식에는 두 가지 구성 요소가 있습니다.A path expression has two components.

  1. 값이 lax 또는 strict인 선택적 Path 모드The optional path mode, with a value of lax or strict.

  2. PATH 자체.The path itself.

Path modePath mode

경로 식의 시작 부분에서 키워드 lax 또는 strict을(를) 지정하여 PATH 모드를 선택적으로 선언합니다.At the beginning of the path expression, optionally declare the path mode by specifying the keyword lax or strict. 기본값은 lax입니다.The default is lax.

  • lax 모드에서 경로 식에 오류가 포함되어 있으면 함수는 빈 값을 반환합니다.In lax mode, the function returns empty values if the path expression contains an error. 예를 들어 $.name 값을 요청했는데 JSON 텍스트에 name 키가 포함되어 있지 않으면 함수는 null을 반환하지만 오류를 발생시키지 않습니다.For example, if you request the value $.name, and the JSON text doesn't contain a name key, the function returns null, but does not raise an error.

  • strict 모드에서 경로 식에 오류가 있으면 함수는 오류를 발생시킵니다.In strict mode, the function raises an error if the path expression contains an error.

다음 쿼리는 경로 식에 lax 모드를 명시적으로 지정합니다.The following query explicitly specifies lax mode in the path expression.

DECLARE @json NVARCHAR(MAX)
SET @json=N'{ ... }'

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

PathPath

선택적인 PATH 모드 선언 후, PATH를 지정합니다.After the optional path mode declaration, specify the path itself.

  • 달러 기호($)는 컨텍스트 항목을 나타냅니다.The dollar sign ($) represents the context item.

  • 속성 경로는 경로 단계의 집합입니다.The property path is a set of path steps. 경로 단계는 다음 요소와 연산자를 포함할 수 있습니다.Path steps can contain the following elements and operators.

    • 키 이름.Key names. 예를 들면 $.name$."first name"입니다.For example, $.name and $."first name". 키 이름이 달러 기호로 시작되거나 공백과 같은 특수 기호를 포함하는 경우, 따옴표로 묶습니다.If the key name starts with a dollar sign or contains special characters such as spaces, surround it with quotes.

    • 배열 요소Array elements. $.product[3])을 입력합니다.For example, $.product[3]. 배열은 0부터 시작됩니다.Arrays are zero-based.

    • 점 연산자(.)는 개체의 멤버를 나타냅니다.The dot operator (.) indicates a member of an object. 예를 들어 $.people[1].surname에서 surnamepeople의 자식입니다.For example, in $.people[1].surname, surname is a child of people.

Examples

이 섹션의 예는 다음 JSON 텍스트를 참조합니다.The examples in this section reference the following JSON text.

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

다음 테이블은 경로 식의 몇 가지 예를 보여줍니다.The following table shows some examples of path expressions.

경로 식Path expression Value
$.people[0].name$.people[0].name JohnJohn
$.people[1]$.people[1] { "name": "Jane", "surname": null, "active": true }{ "name": "Jane", "surname": null, "active": true }
$.people[1].surname$.people[1].surname nullnull
$ { "people": [ { "name": "John", "surname": "Doe" },{ "people": [ { "name": "John", "surname": "Doe" },
{ "name": "Jane", "surname": null, "active": true } ] }{ "name": "Jane", "surname": null, "active": true } ] }

기본 제공 함수에서 중복 경로를 처리하는 방법How built-in functions handle duplicate paths

JSON 텍스트에 중복된 속성(예: 수준과 이름이 같은 두 개의 키)이 포함되는 경우 JSON_VALUEJSON_QUERY 함수는 경로와 일치하는 첫 번째 값만 반환합니다.If the JSON text contains duplicate properties - for example, two keys with the same name on the same level - the JSON_VALUE and JSON_QUERY functions return only the first value that matches the path. 중복 키를 포함하는 JSON 개체의 구문을 분석하고 모든 값을 반환하려면 다음 예제와 같이 OPENJSON을 사용합니다.To parse a JSON object that contains duplicate keys and return all values, use OPENJSON, as shown in the following example.

DECLARE @json NVARCHAR(MAX)
SET @json=N'{"person":{"info":{"name":"John", "name":"Jack"}}}'

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

SQL Server의 기본 제공 JSON 지원에 대한 자세한 정보Learn more about the built-in JSON support in SQL Server

많은 특정 솔루션, 사용 사례 및 권장 사항은 Microsoft 프로그램 관리자인 Jovan Popovic이 제공하는 SQL Server 및 Azure SQL Database의 기본 제공 JSON 지원에 대한 블로그 게시물을 참조하세요.For lots of specific solutions, use cases, and recommendations, see the blog posts about the built-in JSON support in SQL Server and in Azure SQL Database by Microsoft Program Manager Jovan Popovic.

관련 항목:See Also

OPENJSON(Transact-SQL) OPENJSON (Transact-SQL)
JSON_VALUE(Transact-SQL) JSON_VALUE (Transact-SQL)
JSON_QUERY(Transact-SQL)JSON_QUERY (Transact-SQL)