一、JSON簡介
JSON,全稱 JavaScript Object Notation,是一種輕量級的數據交換格式。JSON格式的數據具有易讀、易用和易解析等特點,越來越被廣泛地應用在Web開發中。
一個JSON對象由一組無序的鍵值對組成,鍵和值之間用“:”隔開,鍵值對之間用“,”隔開,整個JSON對象被大括號括起來。如下是一個簡單的JSON對象:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
二、SQL Server JSON簡介
作為一款優秀的數據庫管理系統,SQL Server在2016版本之後推出了JSON解析功能,使得數據的存儲和檢索變得更加靈活和高效。SQL Server JSON提供了一系列的函數和操作符,可以實現JSON數據的快速處理和查詢。
SQL Server JSON具有以下特點:
- 完全兼容ISO標準
- 可與傳統的SQL語句混合使用
- 支持在JSON數據中嵌套的多級查詢
- 提供高級索引和查詢優化功能
三、SQL Server JSON函數
1. JSON_VALUE
JSON_VALUE函數用於獲取JSON對象的指定屬性值,語法如下:
JSON_VALUE ( expression , path [, type ] )
其中,expression表示要查詢的JSON對象或對象中的某個屬性值,path為要查詢的屬性路徑,type為可選參數,表示JSON值的類型。
例如,給定以下JSON對象:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
可以使用JSON_VALUE函數獲取”name”屬性的值:
SELECT JSON_VALUE(@json, '$.name')
輸出結果為:
"John Smith"
2. JSON_QUERY
JSON_QUERY函數用於查詢JSON對象中符合條件的值,並返回一個新的JSON對象,語法如下:
JSON_QUERY ( expression , path )
其中,expression表示要查詢的JSON對象或對象中的某個屬性值,path為要查詢的屬性路徑。
例如,給定以下JSON對象:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
可以使用JSON_QUERY函數獲取”hobbies”屬性的值:
SELECT JSON_QUERY(@json, '$.hobbies')
輸出結果為:
["reading", "cooking", "traveling"]
3. JSON_MODIFY
JSON_MODIFY函數用於修改JSON對象中的屬性值,語法如下:
JSON_MODIFY ( expression , path , newValue )
其中,expression表示要修改的JSON對象或對象中的某個屬性值,path為要修改的屬性路徑,newValue為新的屬性值。
例如,給定以下JSON對象:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
可以使用JSON_MODIFY函數修改”name”屬性的值為”Bob Smith”:
SELECT JSON_MODIFY(@json, '$.name', 'Bob Smith')
輸出結果為:
{ "name": "Bob Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
四、SQL Server JSON操作符
1. ->
->操作符用於獲取JSON對象中的某個子對象或屬性的值,語法如下:
expression -> path
其中,expression表示要查詢的JSON對象或對象中的某個屬性值,path為要查詢的屬性路徑。
例如,給定以下JSON對象:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
可以使用->操作符獲取”hobbies”屬性的值:
SELECT @json->'hobbies'
輸出結果為:
["reading", "cooking", "traveling"]
2. ->>
->>操作符與->操作符的功能類似,用於獲取JSON對象的屬性值,但是->>會將屬性值轉換為字符串類型,語法如下:
expression ->> path
其中,expression表示要查詢的JSON對象或對象中的某個屬性值,path為要查詢的屬性路徑。
例如,給定以下JSON對象:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
可以使用->>操作符獲取”name”屬性的值:
SELECT @json->>'name'
輸出結果為:
"John Smith"
3. =
=操作符用於比較JSON對象中的兩個屬性值是否相等,語法如下:
expression = newValue
其中,expression表示要比較的JSON對象或對象中的某個屬性值,newValue為要比較的值。
例如,給定以下JSON對象:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
可以使用=操作符比較”name”屬性的值是否等於”John Smith”:
SELECT * FROM @json WHERE name = 'John Smith'
輸出結果為:
{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }
五、SQL Server JSON使用實例
1. 創建JSON對象
DECLARE @json nvarchar(max) = N'{ "name": "John Smith", "age": 30, "isMarried": true, "hobbies": ["reading", "cooking", "traveling"] }'
2. 獲取JSON對象中的屬性值
SELECT JSON_VALUE(@json, '$.name')
3. 獲取JSON對象中的數組
SELECT JSON_QUERY(@json, '$.hobbies')
4. 獲取JSON對象中的子對象
SELECT @json->'address'
5. 修改JSON對象中的屬性值
SELECT JSON_MODIFY(@json, '$.name', 'Bob Smith')
6. 查詢JSON對象中符合條件的值
SELECT * FROM @json WHERE age > 25
六、總結
SQL Server JSON是一款優秀的JSON解析庫,提供了豐富的函數和操作符,能夠方便地處理和查詢JSON格式的數據。通過對SQL Server JSON的學習和使用,可以大大提高數據的存儲和檢索效率,讓Web開發變得更加便捷和高效。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/256383.html