从JSON数组读取T-SQL

时间:2017-10-05 08:35:38

标签: sql-server json tsql parsing sql-server-2016

我有以下JSON

DECLARE @json NVARCHAR(max) = '
{
  "source": "one",
  "dataSetId":"a3d5-14fda14",
  "data": [
    {
      "FieldId": 10
    }
  ]
}
'

并且需要将值解析为表。

我试过了:

-- meta
SELECT *  
FROM OPENJSON(@json)  
  WITH ( source NVARCHAR(20)
        ,dataSetId NVARCHAR(50)
        ,FieldId INT '$.data.FieldId'
)

-- array
SELECT * 
FROM OPENJSON(@json, '$.data')
  WITH ( source NVARCHAR(20)
        ,dataSetId NVARCHAR(50)
        ,FieldId int '$.FieldId'
)

它可以获取sourcedataSetId列或获取FieldId列,但我仍然无法合并两个解决方案,以解析非数组和数组数据。< / p>

SELECT应返回一个查询中的所有数据。

1 个答案:

答案 0 :(得分:1)

这个问题有很多解决方案。其中一个是......

DECLARE @json NVARCHAR(max) = '
 {
   "source": "one",
   "dataSetId":"a3d5-14fda14",
   "data": [
    {
      "FieldId": 10
    }
  ]
}'

SELECT  A.* , B.*  
FROM OPENJSON(@json) 
  WITH ( source NVARCHAR(20)
        ,dataSetId NVARCHAR(50)) A ,  
 OPENJSON(@json, '$.data') 
  WITH (  FieldId int '$.FieldId') B