FOR JSON을 사용하여 쿼리 결과를 JSON으로 서식 지정

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

쿼리 결과 형식을 JSON으로 지정하거나, SELECT 문에 FOR JSON 절을 추가하여 데이터를 SQL Server에서 JSON으로 내보냅니다. 절을 FOR JSON 사용하여 앱에서 SQL Server로 JSON 출력의 형식을 위임하여 클라이언트 애플리케이션을 간소화합니다.

참고 항목

Azure Data Studio 는 이 문서에 표시된 대로 JSON 결과의 서식을 자동으로 지정하기 때문에 JSON 쿼리에 권장되는 쿼리 편집기입니다. SQL Server Management Studio는 형식이 지정되지 않은 문자열을 표시합니다.

쿼리 결과 서식 지정

절을 FOR JSON 사용하는 경우 JSON 출력의 구조를 명시적으로 지정하거나 문 구조에서 출력을 SELECT 결정하도록 할 수 있습니다.

  • JSON 출력의 형식을 완전하게 제어하려면 FOR JSON PATH를 사용합니다. 래퍼 개체를 만들고 복합 속성을 중첩할 수 있습니다.

  • 문의 구조에 따라 JSON 출력의 SELECT 서식을 자동으로 지정하려면 .를 사용합니다 FOR JSON AUTO.

다음은 절과 해당 출력이 있는 SELECTFOR JSON 문의 예입니다.

Diagram showing how FOR JSON works.

FOR JSON PATH를 사용하여 출력 제어

모드에서는 PATH 점 구문(예 Item.Price : )을 사용하여 중첩된 출력의 서식을 지정할 수 있습니다.

다음은 절과 함께 모드를 사용하는 PATH 샘플 쿼리입니다 FOR JSON . 다음 예제에서는 명명된 ROOT 루트 요소를 지정 하는 옵션도 사용 합니다.

Diagram of flow of FOR JSON output.

FOR JSON PATH에 대한 자세한 정보

자세한 정보 및 예제는 PATH 모드를 사용하여 중첩된 JSON 출력 서식 지정(SQL Server)을 참조하세요.

구문 및 사용법은 FOR 절(Transact-SQL)을 참조하세요.

기타 JSON 출력 옵션 제어

다음 추가 옵션을 사용하여 절의 FOR JSON 출력을 제어합니다.

  • ROOT

    단일 최상위 요소를 JSON 출력에 추가하려면 옵션을 지정합니다 ROOT . 이 옵션을 지정하지 않으면 JSON 출력에 루트 요소가 없습니다. 자세한 내용은 ROOT 옵션(SQL Server)을 사용하여 JSON 출력에 루트 노드 추가를 참조하세요.

  • INCLUDE_NULL_VALUES

    JSON 출력에 null 값을 포함하려면 옵션을 지정합니다 INCLUDE_NULL_VALUES . 이 옵션을 지정하지 않으면 출력에 쿼리 결과의 값에 대한 NULL JSON 속성이 포함되지 않습니다. 자세한 내용은 JSON - INCLUDE_NULL_VALUES 옵션에 Null 값 포함을 참조하세요.

  • WITHOUT_ARRAY_WRAPPER

    기본적으로 절의 JSON 출력을 둘러싸는 대괄호를 FOR JSON 제거하려면 옵션을 지정합니다 WITHOUT_ARRAY_WRAPPER . 이 옵션을 사용하면 단일 JSON 개체를 단일 행 결과의 출력으로 생성할 수 있습니다. 이 옵션을 지정하지 않으면 JSON 출력의 형식이 배열로 지정됩니다. 즉, 출력이 대괄호 안에 묶입니다. 자세한 내용은 JSON - WITHOUT_ARRAY_WRAPPER 옵션에서 대괄호 제거를 참조 하세요.

FOR JSON 절의 출력

FOR JSON 절의 출력은 다음과 같은 특징이 있습니다.

  1. 결과 집합에는 단일 열이 포함됩니다.

    • 작은 결과 집합에는 단일 행이 포함될 수 있습니다.
    • 결과 집합이 크면 긴 JSON 문자열이 여러 행으로 분할됩니다.
      • 기본적으로 SSMS(SQL Server Management Studio)는 출력 설정이 표 형태로 결과 표시인 경우 결과를 단일 행으로 연결합니다. SSMS 상태 막대에는 실제 행 수가 표시됩니다.

      • 다른 클라이언트 애플리케이션에는 여러 행의 내용을 연결하여 긴 결과를 유효한 단일 JSON 문자열로 다시 조합하는 코드가 필요할 수 있습니다. C# 애플리케이션에서 이 코드의 예제는 C# 클라이언트 앱에서 FOR JSON 출력 사용을 참조 하세요.

        Screenshot of FOR JSON output in SQL Server Management Studio.

  2. 결과는 JSON 개체의 배열로 서식 지정됩니다.

    • JSON 배열의 요소 수는 SELECT 문 결과에서 FOR JSON 절이 적용되기 전의 행 수와 같습니다.

    • SELECT 문 결과(FOR JSON 절을 적용하기 전)의 각 행은 배열에서 별개의 JSON 개체가 됩니다.

    • SELECT 문 결과(FOR JSON 절을 적용하기 전)의 각 열은 JSON 개체의 속성이 됩니다.

  3. 열 이름과 해당 값은 모두 JSON 구문에 따라 이스케이프됩니다. 자세한 내용은 FOR JSON이 특수 문자 및 컨트롤 문자를 이스케이프하는 방법(SQL Server)을 참조하세요.

예시

다음은 FOR JSON 절에서 JSON 출력의 형식을 지정하는 방법을 보여 주는 예제입니다.

쿼리 결과

A B C D
10 11 12 X
20 21 22 Y
30 31 32 Z

JSON 출력

[{
    "A": 10,
    "B": 11,
    "C": 12,
    "D": "X"
}, {
    "A": 20,
    "B": 21,
    "C": 22,
    "D": "Y"
}, {
    "A": 30,
    "B": 31,
    "C": 32,
    "D": "Z"
}]