繁体   English   中英

将 JSON 数组解析为 SQL 表

[英]Parse JSON Array of arrays to SQL table

我有一个来自 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
          ]
        ]
  }
 ]
}

可以有N seriesdata可以有N值。

我想用 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

请提供 SQL 服务器查询以在解析 JSON 时获得所需的结果。

提前致谢。

您需要使用OPENJSON()使用适当的显式模式解析输入 JSON 两次。 当然,您需要 SQL Server 2016+ 才能使用内置的 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]]
    }
  ]
}'

陈述:

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

结果:

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