기본 함수를 사용하여 JSON 데이터 유효성 검사, 쿼리, 변경(SQL Server)Validate, Query, and Change JSON Data with Built-in Functions (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

JSON의 기본 지원에는 이 항목에서 간단히 설명하는 다음과 같은 기본 제공 함수가 포함됩니다.The built-in support for JSON includes the following built-in functions described briefly in this topic.

  • ISJSON 은 문자열에 유효한 JSON이 포함되어 있는지 여부를 테스트합니다.ISJSON tests whether a string contains valid JSON.

  • JSON_VALUE JSON 문자열에서 스칼라 값을 추출합니다.JSON_VALUE extracts a scalar value from a JSON string.

  • JSON_QUERY 는 JSON 문자열에서 개체 또는 배열을 추출합니다.JSON_QUERY extracts an object or an array from a JSON string.

  • JSON_MODIFY 는 JSON 문자열의 속성 값을 업데이트하고 업데이트된 JSON 문자열을 반환합니다.JSON_MODIFY updates the value of a property in a JSON string and returns the updated JSON string.

이 페이지의 예제에 대한 JSON 텍스트JSON text for the examples on this page

이 페이지의 예제에서는 복잡한 요소가 포함된 다음 JSON 텍스트를 사용합니다.The examples on this page use the following JSON text, which contains a complex element.

DECLARE @jsonInfo NVARCHAR(MAX)

SET @jsonInfo=N'{  
     "info":{    
       "type":1,  
       "address":{    
         "town":"Bristol",  
         "county":"Avon",  
         "country":"England"  
       },  
       "tags":["Sport", "Water polo"]  
    },  
    "type":"Basic"  
 }' 

ISJSON 함수를 사용하여 JSON 텍스트의 유효성을 검사합니다. Validate JSON text by using the ISJSON function

ISJSON 함수는 문자열에 유효한 JSON이 포함되어 있는지 여부를 테스트합니다.The ISJSON function tests whether a string contains valid JSON.

다음 예제는 json_col 열에 유효한 JSON이 포함된 행을 반환합니다.The following example returns rows in which the column json_col contains valid JSON.

SELECT id, json_col
FROM tab1
WHERE ISJSON(json_col) > 0 

자세한 내용은 ISJSON(Transact-SQL)을 참조하세요.For more info, see ISJSON (Transact-SQL).

JSON_VALUE 함수를 사용하여 JSON 텍스트에서 값을 추출합니다. Extract a value from JSON text by using the JSON_VALUE function

JSON_VALUE 함수는 JSON 문자열에서 스칼라 값을 추출합니다.The JSON_VALUE function extracts a scalar value from a JSON string.

다음 예제는 중첩된 JSON 속성 town의 값을 지역 변수로 추출합니다.The following example extracts the value of the nested JSON property town into a local variable.

SET @town = JSON_VALUE(@jsonInfo, '$.info.address.town')  

자세한 내용은 JSON_VALUE(Transact-SQL)을 참조하세요.For more info, see JSON_VALUE (Transact-SQL).

JSON_QUERY 함수를 사용하여 JSON 텍스트에서 개체 또는 배열 추출 Extract an object or an array from JSON text by using the JSON_QUERY function

JSON_QUERY 함수는 JSON 문자열에서 개체 또는 배열을 추출합니다.The JSON_QUERY function extracts an object or an array from a JSON string.

다음 예제는 쿼리 결과에 JSON 조각을 반환하는 방법을 보여줍니다.The following example shows how to return a JSON fragment in query results.

SELECT FirstName, LastName, JSON_QUERY(jsonInfo,'$.info.address') AS Address
FROM Person.Person
ORDER BY LastName

자세한 내용은 JSON_QUERY(Transact-SQL)을 참조하세요.For more info, see JSON_QUERY (Transact-SQL).

JSON_VALUE 및 JSON_QUERY 비교 Compare JSON_VALUE and JSON_QUERY

JSON_VALUEJSON_QUERY 간의 주요 차이점은 JSON_VALUE 는 스칼라 값을 반환하고 JSON_QUERY 는 개체 또는 배열을 반환한다는 점입니다.The key difference between JSON_VALUE and JSON_QUERY is that JSON_VALUE returns a scalar value, while JSON_QUERY returns an object or an array.

다음 예제의 JSON 쿼리를 살펴보십시오.Consider the following sample JSON text.

{
    "a": "[1,2]",
    "b": [1, 2],
    "c": "hi"
}  

이 예제 JSON 텍스트에서 데이터 멤버 "a"와 "c"는 문자열 값이며 데이터 멤버 "b"는 배열입니다.In this sample JSON text, data members "a" and "c" are string values, while data member "b" is an array. JSON_VALUEJSON_QUERY 는 다음 결과를 반환합니다.JSON_VALUE and JSON_QUERY return the following results:

경로Path JSON_VALUE 는 다음을 반환합니다.JSON_VALUE returns JSON_QUERY 는 다음을 반환합니다.JSON_QUERY returns
$ NULL 또는 오류NULL or error { "a": "[1,2]", "b": [1,2], "c":"hi"}
$.a$.a [1,2][1,2] NULL 또는 오류NULL or error
$.b$.b NULL 또는 오류NULL or error [1,2][1,2]
$.b[0]$.b[0] 11 NULL 또는 오류NULL or error
$.c$.c hihi NULL 또는 오류NULL or error

AdventureWorks 예제 데이터베이스로 JSON_VALUE 및 JSON_QUERY 테스트Test JSON_VALUE and JSON_QUERY with the AdventureWorks sample database

JSON 데이터가 포함된 AdventureWorks 예제 데이터베이스로 다음 예제를 실행하여 이 항목에서 설명하는 기본 제공 함수를 테스트합니다.Test the built-in functions described in this topic by running the following examples with the AdventureWorks sample database, which contains JSON data. AdventureWorks 예제 데이터베이스를 가져오려면 여기를 클릭하십시오.To get the AdventureWorks sample database, click here.

다음 예제에서 SalesOrder_json 테이블의 Info 열에는 JSON 텍스트가 포함되어 있습니다.In the following examples, the Info column in the SalesOrder_json table contains JSON text.

예제 1 - 두 표준 열과 JSON 데이터 반환Example 1 - Return both standard columns and JSON data

다음 쿼리는 표준 관계형 열과 JSON 열의 값을 모두 반환합니다.The following query returns values from both standard relational columns and from a JSON column.

SELECT SalesOrderNumber, OrderDate, Status, ShipDate, Status, AccountNumber, TotalDue,
 JSON_QUERY(Info,'$.ShippingInfo') ShippingInfo,
 JSON_QUERY(Info,'$.BillingInfo') BillingInfo,
 JSON_VALUE(Info,'$.SalesPerson.Name') SalesPerson,
 JSON_VALUE(Info,'$.ShippingInfo.City') City,
 JSON_VALUE(Info,'$.Customer.Name') Customer,
 JSON_QUERY(OrderItems,'$') OrderItems
FROM Sales.SalesOrder_json
WHERE ISJSON(Info) > 0

예제 2 - JSON 값 집계 및 필터링Example 2- Aggregate and filter JSON values

다음 쿼리는 고객 이름(JSON에 저장)과 상태(일반 열에 저장)를 기준으로 소계를 집계합니다.The following query aggregates subtotals by customer name (stored in JSON) and status (stored in an ordinary column). 그런 다음 시(JSON에 저장) 및 OrderDate(일반 열에 저장)를 기준으로 결과를 필터링합니다.Then it filters the results by city (stored in JSON) and OrderDate (stored in an ordinary column).

DECLARE @territoryid INT;
DECLARE @city NVARCHAR(32);

SET @territoryid=3;

SET @city=N'Seattle';

SELECT JSON_VALUE(Info, '$.Customer.Name') AS Customer, Status, SUM(SubTotal) AS Total
FROM Sales.SalesOrder_json
WHERE TerritoryID=@territoryid
 AND JSON_VALUE(Info, '$.ShippingInfo.City') = @city
 AND OrderDate > '1/1/2015'
GROUP BY JSON_VALUE(Info, '$.Customer.Name'), Status
HAVING SUM(SubTotal)>1000

JSON_MODIFY 함수를 사용하여 JSON 텍스트의 속성 값을 업데이트합니다. Update property values in JSON text by using the JSON_MODIFY function

JSON_MODIFY 함수는 JSON 문자열의 속성 값을 업데이트하고 업데이트된 JSON 문자열을 반환합니다.The JSON_MODIFY function updates the value of a property in a JSON string and returns the updated JSON string.

다음 예제에서는 JSON이 포함된 변수에서 JSON 속성 값을 업데이트합니다.The following example updates the value of a JSON property in a variable that contains JSON.

SET @info = JSON_MODIFY(@jsonInfo, "$.info.address[0].town", 'London')    

자세한 내용은 JSON_MODIFY(Transact-SQL)을 참조하세요.For more info, see JSON_MODIFY (Transact-SQL).

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

ISJSON(Transact-SQL) ISJSON (Transact-SQL)
JSON_VALUE(Transact-SQL) JSON_VALUE (Transact-SQL)
JSON_QUERY(Transact-SQL) JSON_QUERY (Transact-SQL)
JSON_MODIFY(Transact-SQL) JSON_MODIFY (Transact-SQL)
JSON 경로 식(SQL Server)JSON Path Expressions (SQL Server)