简体   繁体   English

将 JSON 数组解析为 SQL 表

[英]Parse JSON Array of arrays to SQL table

I have a JSON response from API like below:我有一个来自 API 的 JSON 响应,如下所示:

{
  "series":[
   {
    "series_id": "SER_ID_1",
    "data": [
          ["20200101",
           1.0
          ],
          ["20200102",
           1.9
          ],
          ["20200103",
           4.5
          ]
        ]
  },
  {
    "series_id": "SER_ID_2",
    "data": [
          ["20200101",
           6.0
          ],
          ["20200102",
           8.9
          ],
          ["20200103",
           1.5
          ]
        ]
  }
 ]
}

There can be N series and there can be N values in data .可以有N seriesdata可以有N值。

I want to parse this JSON in SQL so that I get the below results:我想用 SQL 解析这个 JSON,以便得到以下结果:

series_id       date        value
SER_ID_1        20200101.   1.0
SER_ID_1        20200102.   1.9
SER_ID_1        20200103.   4.5
SER_ID_2        20200101.   6.0
SER_ID_2        20200102.   8.9
SER_ID_2        20200103.   1.5

Please provide a SQL server query to get the desired result on parsing JSON.请提供 SQL 服务器查询以在解析 JSON 时获得所需的结果。

Thanks in advance.提前致谢。

You need to parse the input JSON using OPENJSON() twice with the appropriate explicit schemas.您需要使用OPENJSON()使用适当的显式模式解析输入 JSON 两次。 Of course, you need SQL Server 2016+ to use the built-in JSON support.当然,您需要 SQL Server 2016+ 才能使用内置的 JSON 支持。

JSON: JSON:

DECLARE @json nvarchar(max) = N'
{
  "series":[
    {
    "series_id": "SER_ID_1",
    "data": [["20200101", 1.0], ["20200102", 1.9], ["20200103", 4.5]]
    },
    {
    "series_id": "SER_ID_2",
    "data": [["20200101", 6.0], ["20200102", 8.9], ["20200103", 1.5]]
    }
  ]
}'

Statement:陈述:

SELECT j1.series_id, j2.[date], j2.[value]
FROM OPENJSON(@json, '$.series') WITH (
   series_id varchar(10) '$.series_id',
   data nvarchar(max) '$.data' AS JSON
) j1
OUTER APPLY OPENJSON(j1.data) WITH (
   [date] date '$[0]',
   [value] numeric(5, 1) '$[1]'
) j2

Result:结果:

series_id   date       value
SER_ID_1    2020-01-01   1.0
SER_ID_1    2020-01-02   1.9
SER_ID_1    2020-01-03   4.5
SER_ID_2    2020-01-01   6.0
SER_ID_2    2020-01-02   8.9
SER_ID_2    2020-01-03   1.5

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM