将 JSON 数组解析为 SQL 表

拉吉

我有一个来自 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 series并且可以存在Ndata

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章