无法通过OPENJSON索引访问键

时间:2018-04-24 15:45:37

标签: json tsql datatables jquery-datatables-editor

在SQL中,如何通过索引[0]提取键的值?或者,从这个JSON结构中提取值的最佳方法是什么?

declare @jsonString nvarchar(max)

set @jsonString = '{
"action": "edit",
"data": {
    "Accountable Inventory Technician|99999": {
        "PosTitle": "Accountable Inventory TECH",
        "Publish": "true"
    }
}
}'

这将为我提供密钥的名称,“操作”和“数据”:

select [key]
from OPENJSON(@jsonString, '$')

这将获得Data“Accountable Inventory Technician ...”下第一个键的值:

select *
from OPENJSON(@jsonString, '$.data')

我无法获得“行动”的价值。这什么都不返回:

select *
from OPENJSON(@jsonString, 'lax $.action')

我无法按索引引用。这什么都不返回:

select *
from OPENJSON(@jsonString, '$.data[0].PosTitle')

我做错了什么?

1 个答案:

答案 0 :(得分:1)

  

在SQL中,如何通过索引[0]提取键的值?或者,是什么   从这个JSON结构中提取值的最佳方法是什么?

JSON索引用于数组。例如,如果您的JSON具有JQuery,那么引用[0]项将具有["some","values","in","an","array"]值。 您的示例没有数组,因此您无法以这种方式访问​​它。

  

我无法获得" action"。

的价值

使用"some"您可以访问对象中的特定项目:

JSON_VALUE

如果您的JSON存储在表格中,您可以使用SELECT JSON_VALUE(@jsonString, '$.action') [action]; SELECT JSON_VALUE(@jsonString, '$.data."Accountable Inventory Technician|99999".PosTitle') PosTitle; OPENJSON

访问它
CROSS APPLY