OpenJson使用通配符

时间:2017-10-12 00:17:08

标签: sql sql-server json jsonpath

我有一个使用OPENJSON的sql查询将json数据导入表中。我的问题是我需要的数据是嵌套的。如何在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处找到意外的字符'*'。

我试过了。 * []并没有任何作用

2 个答案:

答案 0 :(得分:0)

据我所知,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

答案 1 :(得分:-2)

尝试..name或$ ..名称。不需要星号。