JSON 경로 식(SQL Server)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics(서버리스 SQL 풀에만 해당)

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

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

  • OPENJSON을 호출하여 JSON 데이터의 관계형 뷰를 만드는 경우 자세한 내용은 OPENJSON(Transact-SQL)을 참조하세요.

  • JSON_VALUE 호출하여 JSON 텍스트에서 값을 추출하는 경우 자세한 내용은 JSON_VALUE(Transact-SQL)를 참조 하세요.

  • JSON 개체 또는 배열을 추출하기 위해 JSON_QUERY 를 호출하는 경우. 자세한 내용은 JSON_QUERY(Transact-SQL)를 참조하세요.

  • JSON_MODIFY 호출하여 JSON 문자열의 속성 값을 업데이트하는 경우 자세한 내용은 JSON_MODIFY(Transact-SQL)를 참조 하세요.

경로 식의 일부

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

  1. lax 또는 strict 값이 있는 선택적 경로 모드입니다.

  2. 경로 자체입니다.

PATH 모드

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

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

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

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

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

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

Path

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

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

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

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

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

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

예제

이 섹션의 예제에서는 다음 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 } ] }

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

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

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

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

SQL Server 및 Azure SQL Database의 JSON에 대해 자세히 알아보기

Microsoft 비디오

참고 항목

이 섹션의 일부 비디오 링크는 현재 작동하지 않을 수 있습니다. Microsoft는 이전에 Channel 9에 있던 콘텐츠를 새 플랫폼으로 마이그레이션하고 있습니다. 비디오가 새 플랫폼으로 마이그레이션되면 링크를 업데이트할 예정입니다.

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

참고 항목

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