수색…


지정된 경로에서 JSON 텍스트의 값 수정

JSON_MODIFY 함수는 JSON 텍스트를 입력 매개 변수로 사용하고 세 번째 인수를 사용하여 지정된 경로의 값을 수정합니다.

declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Price":34.99}'
set @json = JSON_MODIFY(@json, '$.Price', 39.99)
print @json -- Output: {"Id":1,"Name":"Toy Car","Price":39.99}

결과적으로 새로운 JSON 텍스트에 "Price": 39.99가 표시되고 다른 값은 변경되지 않습니다. 지정된 경로에있는 객체가 없으면 JSON_MODIFY는 key : value 쌍을 삽입합니다.

key : value 쌍을 삭제하려면 NULL을 새 값으로 넣습니다.

declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Price":34.99}'
set @json = JSON_MODIFY(@json, '$.Price', NULL)
print @json -- Output: {"Id":1,"Name":"Toy Car"}

JSON_MODIFY는 값이 없으면 기본적으로 키를 삭제하므로 키를 삭제할 때 사용할 수 있습니다.

JSON 배열에 스칼라 값 추가

JSON_MODIFY는 값을 배열에 추가하는 '추가'모드를 가지고 있습니다.

declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Tags":["toy","game"]}'
set @json = JSON_MODIFY(@json, 'append $.Tags', 'sales')
print @json -- Output: {"Id":1,"Name":"Toy Car","Tags":["toy","game","sales"]}

지정된 경로의 배열이 없으면 JSON_MODIFY (append)는 단일 요소로 새 배열을 만듭니다.

declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car","Price":34.99}'
set @json = JSON_MODIFY(@json, 'append $.Tags', 'sales')
print @json -- Output {"Id":1,"Name":"Toy Car","Tags":["sales"]}

JSON 텍스트에 새 JSON 객체 삽입

JSON_MODIFY 함수를 사용하면 JSON 객체를 JSON 텍스트에 삽입 할 수 있습니다.

declare @json nvarchar(4000) = N'{"Id":1,"Name":"Toy Car"}'
set @json = JSON_MODIFY(@json, '$.Price', 
                        JSON_QUERY('{"Min":34.99,"Recommended":45.49}'))
print @json
-- Output: {"Id":1,"Name":"Toy Car","Price":{"Min":34.99,"Recommended":45.49}}

세 번째 매개 변수는 텍스트이기 때문에 텍스트를 JSON_QUERY 함수로 묶어야 텍스트를 JSON으로 "전송"할 수 있습니다. 이 "캐스트"가 없으면 JSON_MODIFY는 문자열 값으로 삽입하기 전에 세 번째 매개 변수를 일반 텍스트 및 이스케이프 문자로 처리합니다. JSON_QUERY가 없으면 결과는 다음과 같습니다.

{"Id":1,"Name":"Toy Car","Price":'{\"Min\":34.99,\"Recommended\":45.49}'}

JSON_MODIFY는이 객체가 없으면 삽입하거나 세 번째 매개 변수의 값이 NULL이면 삭제합니다.

FOR JSON 쿼리로 생성 된 새 JSON 배열 삽입

FOR JSON 절을 사용하여 표준 SELECT 쿼리를 사용하여 JSON 객체를 생성하고이를 JSON 텍스트에 세 번째 매개 변수로 삽입 할 수 있습니다.

declare @json nvarchar(4000) = N'{"Id":17,"Name":"WWI"}'
set @json = JSON_MODIFY(@json, '$.tables', 
                        (select name from sys.tables FOR JSON PATH) )
print @json

(1 row(s) affected)
{"Id":1,"Name":"master","tables":[{"name":"Colors"},{"name":"Colors_Archive"},{"name":"OrderLines"},{"name":"PackageTypes"},{"name":"PackageTypes_Archive"},{"name":"StockGroups"},{"name":"StockItemStockGroups"},{"name":"StockGroups_Archive"},{"name":"StateProvinces"},{"name":"CustomerTransactions"},{"name":"StateProvinces_Archive"},{"name":"Cities"},{"name":"Cities_Archive"},{"name":"SystemParameters"},{"name":"InvoiceLines"},{"name":"Suppliers"},{"name":"StockItemTransactions"},{"name":"Suppliers_Archive"},{"name":"Customers"},{"name":"Customers_Archive"},{"name":"PurchaseOrders"},{"name":"Orders"},{"name":"People"},{"name":"StockItems"},{"name":"People_Archive"},{"name":"ColdRoomTemperatures"},{"name":"ColdRoomTemperatures_Archive"},{"name":"VehicleTemperatures"},{"name":"StockItems_Archive"},{"name":"Countries"},{"name":"StockItemHoldings"},{"name":"sysdiagrams"},{"name":"PurchaseOrderLines"},{"name":"Countries_Archive"},{"name":"DeliveryMethods"},{"name":"DeliveryMethods_Archive"},{"name":"PaymentMethods"},{"name":"SupplierTransactions"},{"name":"PaymentMethods_Archive"},{"name":"TransactionTypes"},{"name":"SpecialDeals"},{"name":"TransactionTypes_Archive"},{"name":"SupplierCategories"},{"name":"SupplierCategories_Archive"},{"name":"BuyingGroups"},{"name":"Invoices"},{"name":"BuyingGroups_Archive"},{"name":"CustomerCategories"},{"name":"CustomerCategories_Archive"}]}

JSON_MODIFY는 FOR JSON 절로 선택 쿼리가 유효한 JSON 배열을 생성하고 JSON 텍스트에 삽입한다는 것을 알 수 있습니다.

WITHOUT_ARRAY_WRAPPER를 제외하고 SELECT 쿼리에서 모든 FOR JSON 옵션을 사용할 수 있습니다.이 옵션은 JSON 배열 대신 단일 객체를 생성합니다. 단일 JSON 객체를 삽입하는 방법은이 항목의 다른 예제를 참조하십시오.

FOR JSON 절로 생성 된 단일 JSON 객체 삽입

FOR JSON 절 및 WITHOUT_ARRAY_WRAPPER 옵션을 사용하여 표준 SELECT 쿼리를 사용하여 JSON 객체를 생성하고이를 JSON 텍스트에 세 번째 매개 변수로 삽입 할 수 있습니다.

declare @json nvarchar(4000) = N'{"Id":17,"Name":"WWI"}'
set @json = JSON_MODIFY(@json, '$.table', 
                        JSON_QUERY(
                         (select name, create_date, schema_id
                           from sys.tables
                           where name = 'Colors' 
                           FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)))
print @json

(1 row(s) affected)
{"Id":17,"Name":"WWI","table":{"name":"Colors","create_date":"2016-06-02T10:04:03.280","schema_id":13}}

SELECT 쿼리가 하나 이상의 결과를 반환하는 경우 (이 경우 기본 키를 사용하거나 기본 키로 필터링해야 함) WITHOUT_ARRAY_WRAPPER 옵션이있는 JSON이 잘못된 JSON 텍스트를 생성 할 수 있습니다. 따라서 JSON_MODIFY는 반환 된 결과가 일반 텍스트 일뿐 아니라 JSON_QUERY 함수로 래핑하지 않으면 다른 텍스트처럼 이스케이프 처리한다고 가정합니다.

결과를 JSON으로 변환하려면 JSON_QUERY 함수를 사용하여 FOROUT JSON, WITHOUT_ARRAY_WRAPPER 쿼리를 래핑해야합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow