Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数组的JSON数组解析为SQL表_Sql_Arrays_Json_Sql Server - Fatal编程技术网

将数组的JSON数组解析为SQL表

将数组的JSON数组解析为SQL表,sql,arrays,json,sql-server,Sql,Arrays,Json,Sql Server,我有一个来自API的JSON响应,如下所示: { "series":[ { "series_id": "SER_ID_1", "data": [ ["20200101", 1.0 ], ["20200102", 1.9 ],

我有一个来自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个系列
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 server查询以获得解析JSON时所需的结果


提前感谢。

您需要使用适当的显式模式使用
OPENJSON()
两次解析输入JSON。当然,您需要SQL Server 2016+来使用内置的JSON支持

JSON:

声明:

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

我知道,我用了一个不正确的词,比如“提供”,但没有提到我试过什么。我曾尝试使用OPENJSON交叉应用程序,但没有成功。我总是自己先尝试,只是没有恰当地表达这个问题。非常感谢@zhorov。我用cross apply做了同样的尝试,用了三次。再次感谢你,这很有帮助。
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