2017-03-01 65 views
0

我已經拖網過去兩天沒有成功,所以很不情願這裏是我的第一個問題,堆棧溢出的好人。解析JSON數據到SQL表

我想將JSON數據轉換爲SQL Server(2016)表,但數據包含一個沒有鍵的數組。該JSON看起來像這樣:

[ 
    { 
    "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 

雖然將能夠做一些事情:

year month day breakdown 
2016 1 1 283082 
2016 1 1 601184 
2016 1 1 140120 
2016 1 2 354725 
2016 1 2 760532 
2016 1 2 177279 

這與這個鏈接的頂部的示例數據: [https://msdn.microsoft.com/en-gb/library/dn921897.aspx][1] [1]:https://msdn.microsoft.com/en-gb/library/dn921897.aspx雖然沒有幫助,這些沒有提到如何提取信息。

有沒有人有關於如何達到預期效果的提示?任何幫助將非常感激。

羅布

+1

也許這可以幫助你? https://msdn.microsoft.com/en-us/library/dn921879.aspx – Danieboy

+0

你的「理想情況下我想擁有」不是一個規範化的數據庫。不是一個好的結構。你的「能夠做些什麼」的例子要好得多。如果您希望稍後能夠像第一個示例那樣輸出它,那麼您可以使用查詢等單獨執行該操作。 – ADyson

回答

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所以一直無法測試做。

+1

絕對完美!感謝您的迅速反應,我會將其標記爲已回答。 – Foxinho

+1

不用擔心。 PS。 Per @ ADyson對你的問題的評論,請注意,上面的代碼假設'breakdownTotal'數組中總會有3個值;更少,並且您將爲多餘的列取得空值,並且不會包含在內。 – JohnLBevan