使用通配符的OpenJson

4

我有一个使用 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个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接