JQ 1.5: временная метка / преобразование даты создают огромный файл - PullRequest
0 голосов
/ 14 ноября 2018

Я использую jq 1.5 в среде оболочки Windows 10 для преобразования файлов json и импорта их в базу данных MS SQL.Исходный файл JSON составляет около 1,1 МБ.Я сохранил файл здесь: Исходный файл 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 МБ.После даты трансформации файл имеет около 40 мб.Я думаю, что в моей команде есть логическая ошибка, но я не могу ее найти.Советы?

С уважением Тимо

1 Ответ

0 голосов
/ 14 ноября 2018

Использование итерации (.segments[]) вызывает мультипликативное поведение: в вашем случае, поскольку в четырех случаях .segments|length равно 2, вы получаете расширение 2 ^ 10 локально, четыре раза.

В таких ситуациях было бы целесообразно использовать небольшой, но хорошо подобранный набор данных (или, возможно, более просто, искусственный набор данных) для проверки кода.

Возможно, вы предполагали что-тобольше похоже:

[ .legs[] | range(0; .segments|length) as $i | .... ]
...