Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.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 Server表_Sql_Json_Sql Server - Fatal编程技术网

如何将嵌套JSON数组插入SQL Server表

如何将嵌套JSON数组插入SQL Server表,sql,json,sql-server,Sql,Json,Sql Server,我试图使用SQLServer的“OPENJSON WITH(…”语法)将JSON文件插入表中。但是,该文件包含嵌套数组,我不知道如何处理 这是我的JSON文件: } "Person_ID":["7120","4816","6088"], "Occupant_Type":["ADT","SCD","MCD"], "Occupant_Gender":["M","F","M"], "Occupant_Height":[180,102,127], "Occupan

我试图使用SQLServer的“OPENJSON WITH(…”语法)将JSON文件插入表中。但是,该文件包含嵌套数组,我不知道如何处理

这是我的JSON文件:

}
    "Person_ID":["7120","4816","6088"],
    "Occupant_Type":["ADT","SCD","MCD"],
    "Occupant_Gender":["M","F","M"],
    "Occupant_Height":[180,102,127],
    "Occupant_Weight":[68,20,22],
    "Occupant_Age":[23,2.5,5.5],
    "Occupied_Region":[],
    "Occupant_Type_Region":[]
}
下面是我尝试使用的代码:

DECLARE @test_data varchar(max)

SELECT @test_data = BulkColumn
FROM OPENROWSET (BULK 'C:\Users\ofiri\OneDrive\Desktop\אופיר\BWR\Data for testing\chevrolet_spark json files\03.03.2020 copy14', SINGLE_CLOB) import 


insert into Person1([ID])
select [ID]
from openjson(@test_data,'$."Person_ID"')
with(
    [ID] VARCHAR '$."Person_ID"'
)

cross apply 

openjson (@test_data,'$."Occupant_Type"')
但是在我运行代码之后,表中的所有属性都是
null


如何将值插入到表中?

语法可能不同,具体取决于预期结果。当然,目标表结构也很重要。请注意,问题中的JSON有一个键入错误。正确的JSON是:

DECLARE @json nvarchar(max) = N'
{
    "Person_ID":["7120","4816","6088"],
    "Occupant_Type":["ADT","SCD","MCD"],
    "Occupant_Gender":["M","F","M"],
    "Occupant_Height":[180,102,127],
    "Occupant_Weight":[68,20,22],
    "Occupant_Age":[23,2.5,5.5],
    "Occupied_Region":[],
    "Occupant_Type_Region":[]
}'
OPENSON()
调用中的错误是路径错误-
$。Person\u ID
而不是
$
。如果要单独解析每个嵌套的JSON数组,应使用带有显式架构的
OPENJSON()
,正确的语句是:

SELECT [ID]
FROM OPENJSON (@json, '$.Person_ID') WITH ([ID] varchar(4) '$')
结果是:

ID
7120
4816
6088
但是,如果JSON包含不同人员的信息,您可能应该使用带有默认模式和如下语句的
OPENJSON()

SELECT 
   j1.[value] AS Person_ID, 
   j2.[value] AS Occupant_Type, 
   j3.[value] AS Occupant_Gender,
   j4.[value] AS Occupant_Height,
   j5.[value] AS Occupant_Weight,
   j6.[value] AS Occupant_Age,
   j7.[value] AS Occupied_Region,
   j8.[value] AS Occupant_Type_Region
FROM OPENJSON(@json, '$."Person_ID"') j1
FULL JOIN OPENJSON(@json, '$."Occupant_Type"') j2 ON j1.[key] = j2.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Gender"') j3 ON j1.[key] = j3.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Height"') j4 ON j1.[key] = j4.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Weight"') j5 ON j1.[key] = j5.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Age"') j6 ON j1.[key] = j6.[key]
FULL JOIN OPENJSON(@json, '$."Occupied_Region"') j7 ON j1.[key] = j7.[key]
FULL JOIN OPENJSON(@json, '$."Occupant_Type_Region"') j8 ON j1.[key] = j8.[key]
结果:

Person_ID   Occupant_Type Occupant_Gender Occupant_Height Occupant_Weight Occupant_Age Occupied_Region Occupant_Type_Region
7120        ADT           M               180             68              23           
4816        SCD           F               102             20              2.5          
6088        MCD           M               127             22              5.5          

此JSON是否包含3个不同人员的数据?解析JSON数据的逻辑是什么?谢谢!这就是我一直在寻找的答案for@ofirsarfaty很乐意帮忙