Zoeken…


Wijzig de waarde in JSON-tekst op het opgegeven pad

JSON_MODIFY-functie gebruikt JSON-tekst als invoerparameter en wijzigt een waarde op het opgegeven pad met behulp van het derde argument:

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}

Als gevolg hiervan hebben we nieuwe JSON-tekst met "Prijs": 39,99 en andere waarden worden niet gewijzigd. Als het object op het opgegeven pad niet bestaat, voegt JSON_MODIFY sleutel: waardepaar in.

Om sleutel: waardepaar te verwijderen, zet NULL als nieuwe waarde:

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 verwijdert standaard de sleutel als deze geen waarde heeft, zodat u deze kunt gebruiken om een sleutel te verwijderen.

Voeg een scalaire waarde toe aan een JSON-array

JSON_MODIFY heeft de modus 'toevoegen' die waarde toevoegt aan de array.

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"]}

Als de array op het opgegeven pad niet bestaat, maakt JSON_MODIFY (toevoegen) een nieuwe array met één element:

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"]}

Nieuw JSON-object invoegen in JSON-tekst

Met de JSON_MODIFY-functie kunt u JSON-objecten in JSON-tekst invoegen:

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}}

Aangezien de derde parameter tekst is, moet u deze inpakken met de JSON_QUERY-functie om tekst naar JSON te "casten". Zonder deze "cast" zal JSON_MODIFY de derde parameter behandelen als platte tekst en ontsnappen aan tekens voordat deze wordt ingevoegd als tekenreekswaarde. Zonder JSON_QUERY zijn de resultaten:

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

JSON_MODIFY zal dit object invoegen als het niet bestaat, of verwijderen als de waarde van de derde parameter NULL is.

Nieuwe JSON-array invoegen die is gegenereerd met de FOR JSON-query

U kunt een JSON-object genereren met behulp van de standaard SELECT-query met de FOR JSON-component en dit als derde parameter in de JSON-tekst invoegen:

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 weet dat de geselecteerde query met de FOR JSON-clausule een geldige JSON-array genereert en deze gewoon in de JSON-tekst invoegt.

U kunt alle FOR JSON-opties in de SELECT-query gebruiken, behalve WITHOUT_ARRAY_WRAPPER , die één object in plaats van JSON-array genereren. Zie ander voorbeeld in dit onderwerp om te zien hoe één JSON-object invoegen.

Voeg één JSON-object in dat is gegenereerd met de clausule FOR JSON

U kunt een JSON-object genereren met behulp van de standaard SELECT-query met de FOR JSON-clausule en de WITHOUT_ARRAY_WRAPPER optie, en het als een derde parameter in JSON-tekst invoegen:

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}}

VOOR JSON met optie WITHOUT_ARRAY_WRAPPER kan ongeldige JSON-tekst genereren als SELECT-query meer dan één resultaat retourneert (in dit geval moet u TOP 1 gebruiken of filteren op primaire sleutel). Daarom gaat JSON_MODIFY ervan uit dat het geretourneerde resultaat gewoon een tekst zonder opmaak is en ontsnapt het net als elke andere tekst als u het niet inpakt met de JSON_QUERY-functie.

U moet de FOR JSON, WITHOUT_ARRAY_WRAPPER zoekopdracht met de JSON_QUERY- functie inpakken om het resultaat naar JSON te casten.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow