在SQL Server中操作JSON資料
黃家瑞 Jerry Huang
- 精誠資訊/恆逸教育訓練中心-資深講師
- 技術分類:資料庫
JSON(JavaScript Object Notation)最早是1999年設計於JavaScript語言中,因為其簡潔的語法格式,利用Name/Value的結構,現今已成為在XML格式之外另一種常見的資料格式語法,許多開發工具的設定檔,從過去的XML格式,很多都已經改以JSON格式,像是廣受程式設計師愛用的Visual Studio Code,設定檔launch.json就是JSON格式。
{ "version": "0.2.0", "configurations": [ { "type": "pwa-chrome", "request": "launch", "name": "Open h1.html", "file": "d:\\temp\\VSCodeData\\h1.html" } ] }
相較於xml格式的資料結構
<?xml version="1.0" ?> <configurations> <type>pwa-chrome</type> <request>launch</request> <name>Open h1.html</name> <file>d:\\temp\\VSCodeData\\h1.html</file </configurations>
除去開始標記(Opening Tag)以及結束標記(Closing Tag)的方式
<type>pwa-chrome</type>
改以name:value形式描述資料內容
"type": "pwa-chrome",
資料表現更為精簡,在傳輸資料時檔案更小,也有利於傳輸的速度。 SQL Server 2016之後也加入了對JSON格式的支援,不過並沒有設計xml資料型別,JSON格式是以varchar, nvarchar, char, nchar, varchar(max), nvarchar(max)形式儲存於資料庫中。以下介紹幾個SQL Server中JSON相關語法及函數。
建立JSON資料:(SQL Server 2022以後的版本支援)
SELECT JSON_OBJECT('name':'value', 'type':1)
結果
JSON陣列:(SQL Server 2022以後的版本支援)
SELECT JSON_ARRAY( JSON_OBJECT('name':'A-Product', 'type':1), JSON_OBJECT('name':'B-Product', 'type':1) )
結果
查詢JSON資料
JSON_QUERY(), JSON_VALUE():SQL Server 2016以後支援
DECLARE @jsonInfo NVARCHAR(MAX)= N'{ "info": { "type": 1, "address": { "town": "Bristol", "county": "Avon", "country": "England" }, "tags": ["Sport", "Water polo"] }, "type": "Basic" }'; SELECT JSON_QUERY(@jsonInfo,'$.info.tags'); SELECT JSON_VALUE(@jsonInfo,'$.info.tags[0]');
執行結果
因為JSON格式的精簡,檔案大小也遠小於XML格式,許多交換格式已逐漸由JSON格式取代原有XML,JSON格式也成了開發系統時不可或缺的技術。SQL Server 2016起加入不少相關語法與支援,由關聯式資料表型式轉為JSON格式(FOR JSON),以及由JSON格式轉為關聯式資料表型式,如以下語法:
SELECT * FROM OPENJSON ( @json ) WITH ( Number varchar(200) '$.Order.Number' , Date datetime '$.Order.Date', Customer varchar(200) '$.AccountNumber', Quantity int '$.Item.Quantity' );
善用這些SQL Server中的功能,可以在開發系統時事半功倍,避免一些不必要的程式碼。