使用 OPENJSON 将 JSON 集合转换为行集后,可以在返回的数据上运行任意 SQL 查询或将其插入到 SQL Server 表中 。

OPENJSON 函数默认返回以下数据 :

  • 从 JSON 对象中,该函数返回在第一个级别找到的所有“键/值”对。
  • 从 JSON 数组中,该函数返回数组的所有元素及其索引。

可以添加可选的 WITH 子句来提供显式定义输出结构的架构 。

选项 1 - 具有默认输出的 OPENJSON

在不提供结果的显式架构的情况下使用 OPENJSON 函数时(即,在 OPENJSON 之后不使用 WITH 子句),该函数将返回包含以下三列的表 :

  1. 输入对象中属性的名称(或输入数组中元素的索引) 。
  2. 属性或数组元素的值 。
  3. 类型(例如,字符串、数字、布尔值、数组或对象) 。

OPENJSON 以单独的行返回 JSON 对象的每个属性或数组的每个元素 。

下面是使用具有默认架构(即不包含可选的 WITH 子句)的 OPENJSON 的快捷示例,该示例为 JSON 对象的每个属性返回一行。

示例

DECLARE @json NVARCHAR(MAX)

SET @json='{"name":"John","surname":"Doe","age":45,"skills":["SQL","C#","MVC"]}';

SELECT *
FROM OPENJSON(@json);

结果

key type
name John 1
surname Doe 1
age 45 2
技能 4

有关具有默认架构的 OPENJSON 的详细信息

使用具有默认架构的 OPENJSON (SQL Server)。

OPENJSON (Transact-SQL)下可用。

选项 2 - 具有显式结构的 OPENJSON 输出

OPENJSON 循环访问 JSON 对象的数组,读取每一列的指定路径上的值,并将值转换为指定类型。

下面是使用具有 WITH 子句中显式指定的输出架构的 OPENJSON 快捷示例 。

示例

DECLARE @json NVARCHAR(MAX)
SET @json =   
  N'[  
       {  
         "Order": {  
           "Number":"SO43659",  
           "Date":"2011-05-31T00:00:00"  
         },  
         "AccountNumber":"AW29825",  
         "Item": {  
           "Price":2024.9940,  
           "Quantity":1  
         }  
       },  
       {  
         "Order": {  
           "Number":"SO43661",  
           "Date":"2011-06-01T00:00:00"  
         },  
         "AccountNumber":"AW73565",  
         "Item": {  
           "Price":2024.9940,  
           "Quantity":3  
         }  
      }  
 ]'  
   
SELECT * FROM  
 OPENJSON ( @json )  
WITH (   
              Number   varchar(200) '$.Order.Number' ,  
              Date     datetime     '$.Order.Date',  
              Customer varchar(200) '$.AccountNumber',  
              Quantity int          '$.Item.Quantity'  
 ) 

结果

Number Date 客户 数量
SO43659 2011-05-31T00:00:00 AW29825 1
SO43661 2011-06-01T00:00:00 AW73565 3

此函数返回 JSON 数组的元素并将其格式化。

  • JSON 数组中的两个元素将在返回的表中转换为两行。

  • 在此示例中,Date 列的值获取自路径 $.Order.Date 上的每个元素,并被转换为日期时间值。

有关具有显式架构的 OPENJSON 的详细信息

使用具有显示架构的 OPENJSON (SQL Server)。

OPENJSON (Transact-SQL)下可用。

OPENJSON 要求兼容性级别 130

其他内置 JSON 函数在所有兼容级别均可用。

可以在 sys.databases 视图或数据库属性中查看兼容级别。

可以使用以下命令更改数据库的兼容级别:
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130

相关文章:

  • 2021-07-13
  • 2021-12-31
  • 2022-01-15
  • 2021-10-13
  • 2021-12-05
  • 2021-05-19
猜你喜欢
  • 2021-06-07
  • 2022-12-23
  • 2021-07-22
  • 2021-06-15
  • 2022-12-23
  • 2021-11-15
  • 2021-12-07
相关资源
相似解决方案