OpenJson 使用通配符
Posted
技术标签:
【中文标题】OpenJson 使用通配符【英文标题】:OpenJson using a wildcard 【发布时间】:2017-10-12 00:17:07 【问题描述】:我有一个使用 OPENJSON 将 JSON 数据导入表的 SQL 查询。我的问题是我需要的数据是嵌套的。如何在 JSON 路径中使用通配符来获取我需要的内容?
SELECT @Set =
BulkColumn FROM OPENROWSET
(BULK 'Sets.json', DATA_SOURCE = 'MyAzureJson', SINGLE_BLOB) JSON;
INSERT INTO [Sets]
SELECT [name]
FROM OPENJSON(@Set)
WITH(
[name] nvarchar(50) '$.*.name'
)
我的json文件是这样设置的..
"testOne" :
name: "nameOne"
,
"testTwo :
name: "nameTwo"
我尝试的一切都遇到了错误..
JSON 路径格式不正确。在位置 2 发现意外字符“*”。
我试过了。 * [] 没有任何效果
【问题讨论】:
【参考方案1】:据我所知,OPENJSON 中不支持通配符。
相反,您可以通过忽略搜索中的字段名称来解决问题。为此使用JSON_VALUE
。
INSERT INTO [Sets]
SELECT
JSON_VALUE([value], '$.name')
FROM
OPENJSON(@Set)
说明:如果您没有在 WITH
子句中定义 OPENJSON 的变量,而是执行简单的 SELECT * FROM OPENJSON(@Set)
查询,您将获得包含键、值和类型列的结果(请参见下面的示例输出)。因为key
包含有问题的字段名称,所以您可以忽略该部分,只查看数据的value
列。
[key] [value] [type]
----- ------- ------
testOne name: "nameOne" 5
testTwo name: "nameTwo" 5
【讨论】:
以上是关于OpenJson 使用通配符的主要内容,如果未能解决你的问题,请参考以下文章