将JSON数据解析为SQL表

时间:2017-03-01 13:02:14

标签: arrays sql-server json

过去两天我在互联网上搜索没有成功,所以这里不情愿地向Stack Overflow的好人提出第一个问题。

我正在尝试将JSON数据转换为SQL Server(2016)表,但数据包含没有键的数组。 JSON看起来像这样:

db.RSS.find().limit(6).sort({$natural:-1}).pretty()

我可以得到下表:

[
  {
    "year": 2016,
    "month": 1,
    "day": 1,
    "breakdownTotal": [
      "283082",
      "601184",
      "140120"
    ]
  },
  {
    "year": 2016,
    "month": 1,
    "day": 2,
    "breakdownTotal": [
      "354725",
      "760532",
      "177279"
    ]
  }
]

但理想情况下我希望:

year    month   day
2016    1   1
2016    1   2

虽然可以做一些事情:

year    month   day breakdown1  breakdown2  breakdown3
2016    1   1   283082  601184  140120
2016    1   2   354725  760532  177279

这与此链接顶部的示例数据类似: [https://msdn.microsoft.com/en-gb/library/dn921897.aspx][1]   [1]:https://msdn.microsoft.com/en-gb/library/dn921897.aspx虽然无益,但没有提到如何提取信息。

有没有人对如何达到预期效果有任何提示?任何帮助将不胜感激。

罗布

1 个答案:

答案 0 :(得分:1)

试试这个(感谢评论中的@Danieboy the link):

DECLARE @json NVARCHAR(MAX)

SET @json='-paste your json here-';

SELECT *
FROM OPENJSON(@json)
WITH (   
    [year]   int '$.year'   
    ,[month] int '$.month'  
    ,[day] int '$.day'  
    ,[breakdown1] bigint '$.breakdownTotal[0]'  
    ,[breakdown2] bigint '$.breakdownTotal[1]'  
    ,[breakdown3] bigint '$.breakdownTotal[2]'  
 ) 
;

可悲的是,我没有SQL 2016,因此无法测试。