Di SQL Server, Anda dapat menggunakan T-SQL JSON_MODIFY()
berfungsi untuk mengubah nilai properti dalam string JSON. Fungsi mengembalikan string JSON yang diperbarui.
Sintaks
Sintaksnya seperti ini:
JSON_MODIFY ( expression , path , newValue )
Dimana expression
adalah ekspresi string JSON, path
adalah jalur ke properti yang ingin Anda perbarui, dan newValue
adalah nilai baru untuk diterapkan ke properti itu.
Contoh 1 – Penggunaan Dasar
Berikut ini contoh untuk didemonstrasikan.
SELECT JSON_MODIFY('{"Name": "Homer"}', '$.Name', 'Bart') AS 'Result';
Hasil:
+------------------+ | Result | |------------------| | {"Name": "Bart"} | +------------------+
Dalam contoh ini:
{"Name": "Homer"}
adalah string JSON asli$.Name
adalah jalurnya (ini dimulai dengan$.
diikuti dengan jalur ke properti yang ingin kami perbarui).Bart
adalah nilai baru yang ingin kita tetapkan keName
(yaitu untuk mengganti nilai saat ini)
Contoh 2 – Mengembalikan JSON Asli dan Modifikasi
Perhatikan bahwa JSON_MODIFY()
tidak mengubah JSON asli. Dibutuhkan salinan, lalu memodifikasi dan mengembalikan salinan.
Berikut ini contoh untuk menunjukkannya:
DECLARE @suspect NVARCHAR(4000) SET @suspect= '{"Name": "Homer"}' SELECT @suspect AS 'Original String', JSON_MODIFY(@suspect, '$.Name', 'Bart') AS 'Modified String', @suspect AS 'Original String';
Hasil:
+-------------------+-------------------+-------------------+ | Original String | Modified String | Original String | |-------------------+-------------------+-------------------| | {"Name": "Homer"} | {"Name": "Bart"} | {"Name": "Homer"} | +-------------------+-------------------+-------------------+
Contoh 3 – Properti Bersarang
Jalur dapat menggunakan notasi titik untuk mereferensikan properti bersarang. Ini contohnya.
DECLARE @data NVARCHAR(4000) SET @data=N'{ "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } }' SELECT JSON_MODIFY(@data,'$.Suspect.Address.City', 'Timaru') AS 'Modified Array';
Hasil:
+------------------+ | Modified Array | |------------------| | { "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Timaru", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } } | +------------------+
Jadi kita dapat melihat bahwa kota telah diubah dari Dunedin
ke Timaru
.
Contoh 4 – Memperbarui Nilai dalam Array
Anda juga dapat memperbarui nilai dalam array. Dalam contoh ini, kami memperbarui nilai di Hobbies
larik.
DECLARE @data NVARCHAR(4000) SET @data=N'{ "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } }' SELECT JSON_MODIFY(@data,'$.Suspect.Hobbies[2]', 'Brain Surgery') AS 'Updated Hobbies';
Hasil:
+-------------------+ | Updated Hobbies | |-------------------| | { "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Brain Surgery"] } } | +-------------------+
Melihat array menggunakan penomoran berbasis nol, kami memperbarui item ketiga dengan merujuk Hobbies[2]
.
Contoh 5 – Menambahkan Nilai ke Array
Dalam contoh ini, kami menambahkan nilai ke Hobbies
Himpunan. Kami melakukan ini dengan menambahkan append
di awal argumen jalur.
DECLARE @data NVARCHAR(4000) SET @data=N'{ "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } }' SELECT JSON_MODIFY(@data,'append $.Suspect.Hobbies', 'Brain Surgery') AS 'Updated Hobbies';
Hasil:
+-------------------+ | Updated Hobbies | |-------------------| | { "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Base Jumping","Brain Surgery"] } } | +-------------------+
Contoh 6 – Perbarui Seluruh Array
Dalam contoh ini, saya memperbarui seluruh array.
DECLARE @data NVARCHAR(4000) SET @data=N'{ "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } }' SELECT JSON_MODIFY(@data,'$.Suspect.Hobbies', JSON_QUERY('["Chess", "Brain Surgery"]')) AS 'Updated Hobbies';
Hasil:
+-------------------+ | Updated Hobbies | |-------------------| | { "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Chess", "Brain Surgery"] } } | +-------------------+
Perhatikan bahwa dalam contoh ini, argumen ketiga diteruskan ke JSON_QUERY()
fungsi. Jika saya tidak melakukan ini, SQL Server akan lolos dari tanda kutip ganda dan tanda kurung siku menggunakan garis miring terbalik (\
) karakter (dan karenanya mengacaukan array). Itu akan melakukan ini karena tidak akan tahu apakah nilai yang diperbarui adalah array yang sebenarnya, atau string literal.
Jadi untuk menyiasatinya, kita bisa menggunakan JSON_QUERY()
. Fungsi ini mengembalikan JSON yang valid, dan SQL Server kemudian akan menganggap bahwa nilai baru adalah array.
Inilah yang akan terjadi jika kita tidak menggunakan JSON_QUERY()
:
DECLARE @data NVARCHAR(4000) SET @data=N'{ "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } }' SELECT JSON_MODIFY(@data,'$.Suspect.Hobbies', '["Chess", "Brain Surgery"]') AS 'Updated Hobbies';
Hasil:
+-------------------+ | Updated Hobbies | |-------------------| | { "Suspect": { "Name": "Homer Simpson", "Address": { "City": "Dunedin", "Region": "Otago", "Country": "New Zealand" }, "Hobbies": "[\"Chess\", \"Brain Surgery\"]" } } | +-------------------+
Jadi SQL Server telah lolos dari tanda kurung siku dan tanda kutip ganda.
Contoh 7 – Perbarui Seluruh Objek
Berikut ini contoh memperbarui seluruh objek.
DECLARE @data NVARCHAR(4000) SET @data=N'{ "Suspect": { "Name": "Homer Simpson", "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } }' SELECT JSON_MODIFY(@data,'$.Suspect', JSON_QUERY('{"Name": "Peter Griffin", "Hobbies": "None"}')) AS 'Updated Object';
Hasil:
+------------------+ | Updated Object | |------------------| | { "Suspect": {"Name": "Peter Griffin", "Hobbies": "None"} } | +------------------+
Sekali lagi, jika kita tidak menggunakan JSON_QUERY()
, kami akan menerima string yang lolos:
DECLARE @data NVARCHAR(4000) SET @data=N'{ "Suspect": { "Name": "Homer Simpson", "Hobbies": ["Eating", "Sleeping", "Base Jumping"] } }' SELECT JSON_MODIFY(@data,'$.Suspect', '{"Name": "Peter Griffin", "Hobbies": "None"}') AS 'Updated Object';
Hasil:
+------------------+ | Updated Object | |------------------| | { "Suspect": "{\"Name\": \"Peter Griffin\", \"Hobbies\": \"None\"}" } | +------------------+
Contoh 8 – Ganti Nama Kunci
Anda tidak hanya terbatas pada memperbarui nilai properti, Anda juga dapat mengganti nama kuncinya. Ini contohnya.
DECLARE @data NVARCHAR(50)='{"Name":"Homer"}' PRINT @data -- Rename the key SET @data= JSON_MODIFY( JSON_MODIFY(@data,'$.Handle', JSON_VALUE(@data,'$.Name')), '$.Name', NULL ) PRINT @data
Hasil:
{"Name":"Homer"} {"Handle":"Homer"}
Di sini, kami mengambil nilai dari properti yang ada dan menetapkannya ke pasangan kunci/nilai baru. Kami kemudian menetapkan nilai kunci asli ke NULL
(yang secara otomatis menghapusnya).
Untuk contoh lebih lanjut tentang mengganti nama kunci, lihat Cara Mengganti Nama Kunci JSON di SQL Server.