FOR JSON을 사용하여 쿼리 결과를 JSON으로 서식 지정(SQL Server)Format Query Results as JSON with FOR JSON (SQL Server)

이 항목은 다음에 적용됩니다. 예SQL Server(2016부터)예Azure SQL Database아니요Azure SQL Data Warehouse아니요병렬 데이터 웨어하우스 THIS TOPIC APPLIES TO: yesSQL Server (starting with 2016)yesAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

SELECT 문에 FOR JSON 절을 추가하여 쿼리 결과를 JSON으로 서식 지정하거나 데이터를 SQL Server에서 JSON으로 내보냅니다.Format query results as JSON, or export data from SQL Server as JSON, by adding the FOR JSON clause to a SELECT statement. FOR JSON 절을 사용하면 JSON 출력 형식 지정을 앱에서 SQL ServerSQL Server로 위임하여 클라이언트 응용 프로그램을 간소화할 수 있습니다.Use the FOR JSON clause to simplify client applications by delegating the formatting of JSON output from the app to SQL ServerSQL Server.

FOR JSON 절을 사용하는 경우 JSON 출력의 구조를 명시적으로 지정하거나 SELECT 문의 구조에 따라 출력이 결정되도록 할 수 있습니다.When you use the FOR JSON clause, you can specify the structure of the JSON output explicitly, or let the structure of the SELECT statement determine the output.

  • JSON 출력의 형식을 완전하게 제어하려면 FOR JSON PATH를 사용합니다.To maintain full control over the format of the JSON output, use FOR JSON PATH. 래퍼 개체를 만들고 복잡한 속성을 중첩할 수 있습니다.You can create wrapper objects and nest complex properties.

  • SELECT 문의 구조에 따라 JSON 출력 형식을 자동으로 지정하려면 FOR JSON AUTO를 사용합니다.To format the JSON output automatically based on the structure of the SELECT statement, use FOR JSON AUTO.

다음은 FOR JSON 절을 사용한 SELECT 문 및 해당 출력의 예입니다.Here's an example of a SELECT statement with the FOR JSON clause and its output.

FOR JSONFOR JSON

옵션 1 - FOR JSON PATH로 출력 제어Option 1 - You control output with FOR JSON PATH

PATH 모드에서는 점 구문(예: 'Item.Price' )을 사용하여 중첩 출력을 서식 지정할 수 있습니다.In PATH mode, you can use the dot syntax – for example, 'Item.Price' – to format nested output.

다음은 PATH 모드를 FOR JSON 절과 함께 사용하는 예제입니다.Here's a sample query that uses PATH mode with the FOR JSON clause. 다음 예제에서는 ROOT 옵션을 사용하여 명명된 루트 요소를 지정합니다.The following example also uses the ROOT option to specify a named root element.

FOR JSON 출력의 흐름 다이어그램Diagram of flow of FOR JSON output

FOR JSON PATH에 대한 추가 정보More info about FOR JSON PATH

자세한 내용과 예제는 PATH 모드로 중첩 JSON 출력 형식 지정(SQL Server)을 참조하세요.For more detailed info and examples, see Format Nested JSON Output with PATH Mode (SQL Server).

구문 및 사용법은 FOR 절(Transact-SQL).For syntax and usage, see FOR Clause (Transact-SQL).

옵션 2 - FOR JSON AUTO를 사용하여 출력을 제어하는 SELECT 문Option 2 - SELECT statement controls output with FOR JSON AUTO

AUTO 모드에서는 SELECT 문의 구조가 JSON 출력의 서식을 결정합니다.In AUTO mode, the structure of the SELECT statement determines the format of the JSON output.

기본적으로 null 값은 출력에 포함되지 않습니다.By default, null values are not included in the output. INCLUDE_NULL_VALUES 를 사용하여 이 동작을 변경할 수 있습니다.You can use the INCLUDE_NULL_VALUES to change this behavior.

다음은 AUTO 모드를 FOR JSON 절과 함께 사용하는 샘플 쿼리입니다.Here's a sample query that uses AUTO mode with the FOR JSON clause.

쿼리:Query:

SELECT name, surname  
FROM emp  
FOR JSON AUTO  

결과Results

[{
    "name": "John"
}, {
    "name": "Jane",
    "surname": "Doe"
}]

FOR JSON AUTO에 대한 추가 정보More info about FOR JSON AUTO

자세한 내용과 예제는 AUTO 모드를 사용하여 JSON 출력 형식 자동 지정(SQL Server)을 참조하세요.For more detailed info and examples, see Format JSON Output Automatically with AUTO Mode (SQL Server).

구문 및 사용법은 FOR 절(Transact-SQL).For syntax and usage, see FOR Clause (Transact-SQL).

기타 JSON 출력 옵션 제어Control other JSON output options

다음과 같은 추가 옵션을 사용하여 FOR JSON 절의 출력을 제어합니다.Control the output of the FOR JSON clause by using the following additional options.

FOR JSON 절의 출력Output of the FOR JSON clause

FOR JSON 절의 출력은 다음과 같은 특징이 있습니다.The output of the FOR JSON clause has the following characteristics:

  1. 결과 집합이 단일 열을 포함합니다.The result set contains a single column.

    • 작은 결과 집합은 단일 행을 포함할 수 있습니다.A small result set may contain a single row.
    • 결과 집합이 크면 긴 JSON 문자열이 여러 행으로 분할됩니다.A large result set splits the long JSON string across multiple rows.

      • 기본적으로 SSMS(SQL Server Management Studio)는 출력 설정이 표 형태로 결과 표시인 경우 결과를 단일 행으로 연결합니다.By default, SQL Server Management Studio (SSMS) concatenates the results into a single row when the output setting is Results to Grid. SSMS 상태 표시줄에 실제 행 수가 표시됩니다.The SSMS status bar displays the actual row count.
      • 다른 클라이언트 응용 프로그램에는 여러 행의 내용을 연결하여 길이가 긴 결과를 하나의 유효한 JSON 문자열로 다시 결합하는 코드가 필요할 수 있습니다.Other client applications may require code to recombine lengthy results into a single, valid JSON string by concatenating the contents of multiple rows. C# 응용 프로그램에서 이 코드의 예는 C# 클라이언트 앱에서 FOR JSON 출력 사용을 참조하세요.For an example of this code in a C# application, see Use FOR JSON output in a C# client app.

      FOR JSON 출력의 예Example of FOR JSON output

  2. 결과는 JSON 개체의 배열로 서식 지정됩니다.The results are formatted as an array of JSON objects.

    • JSON 배열의 요소 수는 SELECT 문 결과(FOR JSON 절을 적용하기 전)의 행 수와 같습니다.The number of elements in the JSON array is equal to the number of rows in the results of the SELECT statement (before the FOR JSON clause is applied).

    • SELECT 문 결과(FOR JSON 절을 적용하기 전)의 각 행은 배열에서 별개의 JSON 개체가 됩니다.Each row in the results of the SELECT statement (before the FOR JSON clause is applied) becomes a separate JSON object in the array.

    • SELECT 문 결과(FOR JSON 절을 적용하기 전)의 각 열은 JSON 개체의 속성이 됩니다.Each column in the results of the SELECT statement (before the FOR JSON clause is applied) becomes a property of the JSON object.

  3. JSON 구문에 따라 열과 해당 값의 이름이 모두 이스케이프됩니다.Both the names of columns and their values are escaped according to JSON syntax. 자세한 내용은 FOR JSON이 특수 문자 및 제어 문자를 이스케이프 처리하는 방법(SQL Server).For more info, see How FOR JSON escapes special characters and control characters (SQL Server).

예제Example

다음은 FOR JSON 절에서 JSON 출력의 형식을 지정하는 방법을 보여 주는 예제입니다.Here's an example that demonstrates how the FOR JSON clause formats the JSON output.

쿼리 결과Query results

변수를 잠그기 위한A BB CC DD
1010 1111 1212 XX
2020 2121 2222 YY
3030 3131 3232 ZZ

JSON 출력JSON output

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

FOR JSON 절의 출력에 나타나는 자세한 내용은 다음 항목을 참조하세요.For more info about what you see in the output of the FOR JSON clause, see the following topics.

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

FOR 절(Transact-SQL) FOR Clause (Transact-SQL)
SQL Server 및 클라이언트 앱에서 FOR JSON 출력 사용(SQL Server)Use FOR JSON output in SQL Server and in client apps (SQL Server)