我已嵌套JSON文件:
"vehicleStatusResponse": {
"vehicleStatuses": [
{
"vin": "ABC1234567890",
"triggerType": {
"triggerType": "TIMER",
"context": "RFMS",
"driverId": {
"tachoDriverIdentification": {
"driverIdentification": "123456789",
"cardIssuingMemberState": "BRA",
"driverAuthenticationEquipment": "CARD",
"cardReplacementIndex": "0",
"cardRenewalIndex": "1"
}
}
},
"receivedDateTime": "2020-02-12T04:11:19.221Z",
"hrTotalVehicleDistance": 103306960,
"totalEngineHours": 3966.6216666666664,
"driver1Id": {
"tachoDriverIdentification": {
"driverIdentification": "BRA1234567"
}
},
"engineTotalFuelUsed": 48477520,
"accumulatedData": {
"durationWheelbaseSpeedOverZero": 8309713,
"distanceCruiseControlActive": 8612200,
"durationCruiseControlActive": 366083,
"fuelConsumptionDuringCruiseActive": 3064170,
"durationWheelbaseSpeedZero": 5425783,
"fuelWheelbaseSpeedZero": 3332540,
"fuelWheelbaseSpeedOverZero": 44709670,
"ptoActiveClass": [
{
"label": "wheelbased speed >0",
"seconds": 16610,
"meters": 29050,
"milliLitres": 26310
},
{
"label": "wheelbased speed =0",
"seconds": 457344,
"milliLitres": 363350
它已经从Azure BLOB存储导入到SQL DB,现在我需要从中提取数据到表。我已经使用了T-SQL请求来执行此操作,但是它返回了只有标头的空白表:
SELECT response.*
FROM OPENROWSET (BULK 'response3.json', DATA_SOURCE = 'VCBI24', SINGLE_CLOB) as j
CROSS APPLY OPENJSON(BulkColumn)
WITH ( vehiclestatusResponse nvarchar (100), vehicleStatuses nvarchar (100), vin nvarchar (100), triggerType nvarchar (100), context nvarchar (100) and etc...) AS response
我该如何处理?
非常感谢您的关注!
OPENJSON
的路径,该路径允许您深入到嵌套的JSON,例如SELECT *
FROM OPENJSON( @json, '$.vehicleStatusResponse.vehicleStatuses' )
WITH (
vin VARCHAR(50) '$.vin',
triggerType VARCHAR(50) '$.triggerType.triggerType',
context VARCHAR(50) '$.triggerType.context',
driverIdentification VARCHAR(50) '$.triggerType.driverId.tachoDriverIdentification.driverIdentification',
cardIssuingMemberState VARCHAR(50) '$.triggerType.driverId.tachoDriverIdentification.cardIssuingMemberState',
receivedDateTime DATETIME '$.receivedDateTime',
engineTotalFuelUsed INT '$.engineTotalFuelUsed'
)
完整脚本示例:
DECLARE @json VARCHAR(MAX) = '{ "vehicleStatusResponse": { "vehicleStatuses": [ { "vin": "ABC1234567890", "triggerType": { "triggerType": "TIMER", "context": "RFMS", "driverId": { "tachoDriverIdentification": { "driverIdentification": "123456789", "cardIssuingMemberState": "BRA", "driverAuthenticationEquipment": "CARD", "cardReplacementIndex": "0", "cardRenewalIndex": "1" } } }, "receivedDateTime": "2020-02-12T04:11:19.221Z", "hrTotalVehicleDistance": 103306960, "totalEngineHours": 3966.6216666666664, "driver1Id": { "tachoDriverIdentification": { "driverIdentification": "BRA1234567" } }, "engineTotalFuelUsed": 48477520, "accumulatedData": { "durationWheelbaseSpeedOverZero": 8309713, "distanceCruiseControlActive": 8612200, "durationCruiseControlActive": 366083, "fuelConsumptionDuringCruiseActive": 3064170, "durationWheelbaseSpeedZero": 5425783, "fuelWheelbaseSpeedZero": 3332540, "fuelWheelbaseSpeedOverZero": 44709670, "ptoActiveClass": [ { "label": "wheelbased speed >0", "seconds": 16610, "meters": 29050, "milliLitres": 26310 }, { "label": "wheelbased speed =0", "seconds": 457344, "milliLitres": 363350 } ] } } ] }}}}}}}}' SELECT * FROM OPENJSON( @json, '$.vehicleStatusResponse.vehicleStatuses' ) WITH ( vin VARCHAR(50) '$.vin', triggerType VARCHAR(50) '$.triggerType.triggerType', context VARCHAR(50) '$.triggerType.context', driverIdentification VARCHAR(50) '$.triggerType.driverId.tachoDriverIdentification.driverIdentification', cardIssuingMemberState VARCHAR(50) '$.triggerType.driverId.tachoDriverIdentification.cardIssuingMemberState', receivedDateTime DATETIME '$.receivedDateTime', engineTotalFuelUsed INT '$.engineTotalFuelUsed' )
我的结果:在此处阅读有关
OPENJSON
的更多信息:https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql?view=sql-server-ver15