如何处理多个JSON文档

时间:2017-10-30 14:24:35

标签: sql-server json parsing

使用SQL Server 2017我想出了如何解析包含单个JSON文档的单个JSON文件,以便存储在表中。

但是,我需要能够处理包含许多JSON文档的文件。是否有内置函数来执行此操作?或者任何人都可以解释如何做到这一点?

3 个答案:

答案 0 :(得分:1)

在某种程度上重复自己,但我想我已经弄明白了。

  1. 我创建了一个包含500个单独JSON文档的文件
  2. 我手动添加了特定于JSON的开启和关闭支架球拍 第1行和最后一行。
  3. 我使用此语法查询文件:

    select SQ1.* from OPENROWSET (BULK 'C:\Users\Username\Documents\SQL Server Management Studio\Projects\json_files\dev_AllJsonDownload.json', SINGLE_CLOB) as mytest CROSS APPLY OPENJSON(BulkColumn) WITH (...colA ...colB ...colC ...colN ) as SQ1

  4. 这返回了我想要的内容。

答案 1 :(得分:0)

您可以使用 OPENROWSET(BULK)将一组JSON文件从文件系统一次加载到一个本地变量中。假设文件名为book<index>.json

DECLARE @i INT = 1
DECLARE @json AS NVARCHAR(MAX)

WHILE(@i < 10)
BEGIN
    SET @file = 'C:\JSON\Books\book' + cast(@i AS VARCHAR(5)) + '.json';
    SELECT @json = BulkColumn FROM OPENROWSET (BULK (@file), SINGLE_CLOB) AS j
    SELECT * FROM OPENJSON(@json) AS json
    -- Optionally, save the JSON text in a table.
    SET @i = @i + 1 ;
END

Reference

答案 2 :(得分:0)

我已经尝试了上面的脚本来加载文件夹中的multipe json文件。 它没有按预期工作,然后我对此做了一些基础工作,并使用动态sql完成了该任务。

假设一个文件夹中有3个文件,并且您想按照以下脚本将这些json文件加载到sql server中。效果很好。

DECLARE @i INT = 1 声明@SQL Varchar(200) 声明@file Varchar(100)

WHILE(@i <4) 开始    SET @file ='''E:\ DrugBank \ json1'+ cast(@i AS VARCHAR(5))+'.json''';       - 选择文件    SET @ SQL ='INSERT INTO json_table SELECT * FROM OPENROWSET(BULK'+ @ file +',SINGLE_CLOB)AS e'

   PRINT @SQL
   EXEC (@SQL)
   SET @i = @i + 1 ; 

END