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)