Microsoft SQL Server
Wijzig JSON-tekst
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.