无法使用 OPENJSON 按索引访问键
Cannot access keys by index with OPENJSON
在SQL中,如何通过索引[0]
提取键的值?或者,从这个 JSON 结构中提取值的最佳方法是什么?
declare @jsonString nvarchar(max)
set @jsonString = '{
"action": "edit",
"data": {
"Accountable Inventory Technician|99999": {
"PosTitle": "Accountable Inventory TECH",
"Publish": "true"
}
}
}'
这会得到键的名称,"action" 和 "data":
select [key]
from OPENJSON(@jsonString, '$')
这将获取数据 "Accountable Inventory Technician..." 下第一个键的值:
select *
from OPENJSON(@jsonString, '$.data')
我无法获取 "action" 的值。这个returns没什么:
select *
from OPENJSON(@jsonString, 'lax $.action')
我无法通过索引引用。这个returns没什么:
select *
from OPENJSON(@jsonString, '$.data[0].PosTitle')
我做错了什么?
In SQL, how do I extract the value of a key by index [0]? OR, what is
the best way to extract a value from this JSON structure?
JSON 索引用于数组。例如,如果您的 JSON 具有 ["some","values","in","an","array"]
,则引用 [0] 项将具有 "some"
值。
您的示例没有数组,因此您将无法以这种方式访问它。
I cannot get the value of "action".
使用 JSON_VALUE
您可以访问对象中的特定项目:
SELECT JSON_VALUE(@jsonString, '$.action') [action];
SELECT JSON_VALUE(@jsonString, '$.data."Accountable Inventory Technician|99999".PosTitle') PosTitle;
如果您的 JSON 存储在 table 中,您可以使用 OPENJSON
和 CROSS APPLY
访问它
DROP TABLE IF EXISTS #json
CREATE TABLE #json (JsonString NVARCHAR(MAX));
INSERT #json SELECT '{
"action": "edit",
"data": {
"Accountable Inventory Technician|99999": {
"PosTitle": "Accountable Inventory TECH",
"Publish": "true"
}
}
}'
SELECT * FROM #json j
CROSS APPLY
OPENJSON(j.JsonString)
WITH
(
[Action] varchar(255) '$.action',
PosTitle varchar(255) '$.data."Accountable Inventory Technician|99999".PosTitle'
);
在SQL中,如何通过索引[0]
提取键的值?或者,从这个 JSON 结构中提取值的最佳方法是什么?
declare @jsonString nvarchar(max)
set @jsonString = '{
"action": "edit",
"data": {
"Accountable Inventory Technician|99999": {
"PosTitle": "Accountable Inventory TECH",
"Publish": "true"
}
}
}'
这会得到键的名称,"action" 和 "data":
select [key]
from OPENJSON(@jsonString, '$')
这将获取数据 "Accountable Inventory Technician..." 下第一个键的值:
select *
from OPENJSON(@jsonString, '$.data')
我无法获取 "action" 的值。这个returns没什么:
select *
from OPENJSON(@jsonString, 'lax $.action')
我无法通过索引引用。这个returns没什么:
select *
from OPENJSON(@jsonString, '$.data[0].PosTitle')
我做错了什么?
In SQL, how do I extract the value of a key by index [0]? OR, what is the best way to extract a value from this JSON structure?
JSON 索引用于数组。例如,如果您的 JSON 具有 ["some","values","in","an","array"]
,则引用 [0] 项将具有 "some"
值。
您的示例没有数组,因此您将无法以这种方式访问它。
I cannot get the value of "action".
使用 JSON_VALUE
您可以访问对象中的特定项目:
SELECT JSON_VALUE(@jsonString, '$.action') [action];
SELECT JSON_VALUE(@jsonString, '$.data."Accountable Inventory Technician|99999".PosTitle') PosTitle;
如果您的 JSON 存储在 table 中,您可以使用 OPENJSON
和 CROSS APPLY
DROP TABLE IF EXISTS #json
CREATE TABLE #json (JsonString NVARCHAR(MAX));
INSERT #json SELECT '{
"action": "edit",
"data": {
"Accountable Inventory Technician|99999": {
"PosTitle": "Accountable Inventory TECH",
"Publish": "true"
}
}
}'
SELECT * FROM #json j
CROSS APPLY
OPENJSON(j.JsonString)
WITH
(
[Action] varchar(255) '$.action',
PosTitle varchar(255) '$.data."Accountable Inventory Technician|99999".PosTitle'
);