JSON 路徑運算式 (SQL Server)
適用於: SQL Server 2016 (13.x) 以上版本 Azure SQL 資料庫Azure SQL 受控執行個體Azure Synapse Analytics (僅無伺服器 SQL 集區)
請使用 JSON 路徑運算式來參考 JSON 物件的屬性。
當您呼叫下列函數時,必須提供路徑運算式。
呼叫 OPENJSON 以建立 JSON 資料的關聯檢視時。 如需詳細資訊,請參閱 OPENJSON (Transact-SQL)。
呼叫 JSON_VALUE 以從 JSON 文字擷取值時。 如需詳細資訊,請參閱 JSON_VALUE (Transact-SQL)。
呼叫 JSON_QUERY 以擷取 JSON 物件或陣列時。 如需詳細資訊,請參閱 JSON_QUERY (Transact-SQL)。
呼叫 JSON_MODIFY 以更新 JSON 字串中的屬性值時。 如需詳細資訊,請參閱 JSON_MODIFY (Transact-SQL)。
路徑運算式的組成部分
路徑運算式有兩個元件。
路徑模式
在路徑運算式的開頭,指定關鍵字 lax 或 strict以選擇性地宣告路徑模式。 預設值是 lax。
在 lax 模式中,如果路徑運算式包含錯誤,函數會傳回空白值。 例如,如果您要求值 $.name,且 JSON 文字不包含 name 索引鍵,則函數會傳回 null,但不會引發錯誤。
在 strict 模式中,如果路徑運算式包含錯誤,函數會引發錯誤。
下列查詢會在路徑運算式中明確指定 lax
模式。
DECLARE @json NVARCHAR(MAX);
SET @json=N'{ ... }';
SELECT * FROM OPENJSON(@json, N'lax $.info');
路徑
選擇性地宣告路徑模式之後,請指定路徑本身。
貨幣符號 (
$
) 表示內容項目。屬性路徑是一組路徑步驟。 路徑步驟可包含下列元素和運算子。
索引鍵名稱。 例如,
$.name
與$."first name"
。 如果索引鍵名稱以貨幣符號開頭或包含特殊字元 (例如空格或點運算子 (.
)),請用引號括住。陣列元素。 例如:
$.product[3]
。 以零為基底的陣列。點運算子 (
.
) 表示物件的成員。 例如,在$.people[1].surname
中,surname
是people
的子系。
範例
本節中的範例參考下列 JSON 文字。
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
下表顯示路徑運算式的一些範例。
路徑運算式 | 值 |
---|---|
$.people[0].name | John |
$.people[1] | { "name": "Jane", "surname": null, "active": true } |
$.people[1].surname | null |
$ | { "people": [ { "name": "John", "surname": "Doe" }, { "name": "Jane", "surname": null, "active": true } ] } |
內建函數處理重複路徑的方法
如果 JSON 文字包含重複的屬性 (例如相同層級上有兩個同名的索引鍵),JSON_VALUE 和 JSON_QUERY 函數會傳回第一個符合路徑的值。 若要剖析包含重複索引鍵的 JSON 物件,請使用 OPENJSON,如下列範例所示。
DECLARE @json NVARCHAR(MAX);
SET @json=N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON(@json,'$.person.info');
深入了解 SQL Server 和 Azure SQL Database 中的 JSON
Microsoft 影片
注意
本節中的部分影片連結目前可能無法運作。 Microsoft 正在將先前在 Channel 9 上的內容移轉至新的平台。 我們會在影片移轉至新平台時更新連結。
如需 SQL Server 和 Azure SQL Database 中內建 JSON 支援的觀看式簡介,請參閱下列影片:
另請參閱
OPENJSON (Transact-SQL)
JSON_VALUE (Transact-SQL)
JSON_QUERY (Transact-SQL)
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應