다음을 통해 공유


JSON 경로 식(SQL Server)

적용 대상: SQL Server 2016(13.x) 이상 Azure SQL 데이터베이스 Azure SQL Managed Instance Azure 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 모드

경로 식의 시작 부분에서 선택적으로 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_VALUEJSON_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 데이터베이스에서의 JSON에 대해 알아보기

Microsoft 비디오

참고 항목

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

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

참고 항목

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