SQL OpenJson - 无法在 json 中为 json 创建列

问题描述

我一直在 sql 中使用 OPEnjsON 并有一个问题。

假设我有以下 JSON,

[
 { "id" : 2,"firstName": "John","lastName": "Smith","age": 25,"dateOfBirth": "2007-03-25T12:00:00","data":{"$source":"Online"} },]

我可以使用 OPEnjsON 为除 source 之外的所有列动态创建列。

这是我的代码

  SELECT *
  FROM OPEnjsON(@json)
  WITH (id int,firstName nvarchar(50),lastName nvarchar(50),age int,dateOfBirth datetime2,[$Source] varchar(50))

除了嵌套的 json data 之外,我正在恢复每一列。

随意编辑问题标题

解决方法

不太清楚为什么您的来源以“$”开头。如果要从嵌套的 json 中获取数据,则需要标识列的根。例如

DECLARE @JSON NVARCHAR(max) = 
N'[
 { "id" : 2,"firstName": "John","lastName": "Smith","age": 25,"dateOfBirth": "2007-03-25T12:00:00","data":{"source":"Online"} }
]'

SELECT *
  FROM OPENJSON(@json)
  WITH (id int,firstName nvarchar(50),lastName nvarchar(50),age int,dateOfBirth datetime2,source VARCHAR(50) '$.data.source',data nvarchar(max) AS JSON)