[英]JQ 1.5: Timestamp / date transformation produce huge file
我在Windows 10 powershell環境下使用jq 1.5轉換json文件並將其導入到MS SQL數據庫。 原始的json文件約為1,1mb。 我將文件存儲在這里: Json原始文件 。 我使用以下jq命令來轉換數據:
[.legs[] | {Legid: .legId, Farecode: .fareBasisCode, Travelduration: .travelDuration, Traveldistance: .totalTravelDistance, Distanceunit: .totalTravelDistanceUnits, Refundable: .isRefundable , Nonstop: .isNonStop, Departure_Airport: .segments[].departureAirportName, Departure_Code: .segments[].departureAirportCode, Arrival_Airport: .segments[].arrivalAirportName, Arrival_Code: .segments[].arrivalAirportCode, Departure_Time: .segments[].departureTimeEpochSeconds, Arrival_Time: .segments[].arrivalTimeEpochSeconds, Airline: .segments[].airlineName, Airline_Code: .segments[].airlineCode, Flight_Number: .segments[].flightNumber, Equipment: .segments[].equipmentDescription}]
該命令產生以下文件轉換后的文件 。 現在,我不得不將UNIX時間戳轉換為日期。 所以我修改了命令:
[.legs[] | {Legid: .legId, Farecode: .fareBasisCode, Travelduration: .travelDuration, Traveldistance: .totalTravelDistance, Distanceunit: .totalTravelDistanceUnits, Refundable: .isRefundable , Nonstop: .isNonStop, Departure_Airport: .segments[].departureAirportName, Departure_Code: .segments[].departureAirportCode, Arrival_Airport: .segments[].arrivalAirportName, Arrival_Code: .segments[].arrivalAirportCode, Departure_Time: .segments[].departureTimeEpochSeconds, Arrival_Time: .segments[].arrivalTimeEpochSeconds, Airline: .segments[].airlineName, Airline_Code: .segments[].airlineCode, Flight_Number: .segments[].flightNumber, Equipment: .segments[].equipmentDescription}] | .[].Departure_Time |= todate | .[].Arrival_Time |= todate
沒有日期轉換的轉換文件大約有3 mb。 在轉換日期之后,文件大小約為40 mb。 我認為我的命令中存在邏輯錯誤,但找不到它。 提示?
問候蒂莫
使用迭代( .segments[]
)會導致乘法行為:在您的情況下,由於在四種情況下.segments|length
為2,因此在本地得到2 ^ 10的擴展,是四倍。
在這種情況下,使用少量但選擇良好的數據子集(或者更容易使用人工數據集)來檢查代碼將是有意義的。
也許您想要的更像是:
[ .legs[] | range(0; .segments|length) as $i | .... ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.