環境
- SQL 服務器 2016
- 視窗 2016
我目前正在從 API 獲取資訊。當我呼叫這個 API 時,我得到以下 JSON 文本:
{"request":{"command":"series","series_id":"342"},"series":[{"series_id":"342","data":[["2023",125.39355], ["2022",122.85654167],["2021",118.36935],["2020",113.74025],["2019",112.27875],["2018",110.3265],["2017",107.742],[" 2016",105.70325],["2015",104.6615],["2014",103.6625],["2013",101.76875],["2012",100.00025],["2011",98.15725],["2010" ,96.16425],["2009",95.019],["2008",94.39725],["2007",92.65325],["2006",90.2115],["2005",87.49],["2004",84.84175 ],["2003",82.63525],["2002",81.01275],["2001",79.8145],["2000",78.01625],["1999",76.27275],["1998",75.2195],["1997",74.39925],["1996",73.13225],["1995",71.819],["1994",70.342],["1993" ,68.87425],["1992",67.27775],["1991",65.77725],["1990",63.63575]]}]}'
問題
我試圖將資料陣列決議為兩列,“年”和“值”。我不關心其他任何事情。我不確定如何決議這個 Json 字串。我最近的嘗試是
DECLARE @json nvarchar(max) = N'*<api data from above>*'
SELECT
AllData --AllData,Replace(Replace(Replace(AllData, '"',''),'[',''),']','')
FROM
OPENJSON(@json)
WITH (
data NVARCHAR(Max) '$.request.series.data' AS JSON
)
OUTER APPLY
OPENJSON(data)
WITH (AllData VARCHAR(50) '$.request.series.data')
我嘗試了許多不同的路線(例如 $.data、$.series.data 等),但均無濟于事。目前,如果我可以將資料陣列重新放入單列(例如 2023、123.39.355;2022、122.85 等),我可以輕松地從那里決議成兩列(因此注釋掉了 Replace 函式),但所有我回傳為空。
有任何想法嗎?
uj5u.com熱心網友回復:
小提琴
select *
from openjson(@json, '$.series[0].data')
with
(
year smallint '$[0]',
value decimal(20, 10) '$[1]'
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/425351.html
標籤:json sql服务器 tsql json-arrayagg
上一篇:如何減少SQL視圖中的子查詢
