JQ: установить верхний уровень пути - PullRequest
0 голосов
/ 11 октября 2018

Я использую jq 1.5 в среде Windows, чтобы изменить заданный большой файл json для извлечения одного массива («Предложения») из этого большого файла:

'.Offers[] | ({Price: .AdultPriceEUR, Currency: .Currency, Link: .Deeplink, Tickettyp: .TicketClassIndex, Flightindex: .FlightIndex })'

После этого я получил «неназванный»Массив.Но для дальнейшей обработки необходимо, чтобы Массив сохранил свое старое «Имя».Я проверил документацию и нашел функцию setpath, но невозможно сохранить имя «легким» при извлечении?

Сокращенный пример файла json:

   {"Airports": [
    {
        "Aliases": null,
        "ContinentCode": "EU",
        "ContinentGroup": 1,
        "CountryCode": "DE",
        "CountryName": "Germany",
        "DST": "",
        "DisplayName": "Hamburg (HAM) Germany",
        "Iata": "HAM",
        "IataLink": false,
        "Icao": "EDDH",
        "Latitude": 53.63215,
        "Longitude": 10.0041609,
        "MainCityCode": "HAM",
        "MainCityDisplayName": "Hamburg (HAM) Germany",
        "MainCityName": "Hamburg",
        "Name": "Hamburg",
        "Priority": 142,
        "StateCode": null,
        "StateName": null,
        "TimeZone": -798214753
    },
    {
        "Aliases": null,
        "ContinentCode": "AS",
        "ContinentGroup": 4,
        "CountryCode": "TH",
        "CountryName": "Thailand",
        "DST": "",
        "DisplayName": "Suvarnabhumi, Bangkok (BKK) Thailand",
        "Iata": "BKK",
        "IataLink": false,
        "Icao": "VTBS",
        "Latitude": 13.6922979,
        "Longitude": 100.750694,
        "MainCityCode": "BKK",
        "MainCityDisplayName": "Bangkok (BKK) Thailand",
        "MainCityName": "Bangkok",
        "Name": "Suvarnabhumi",
        "Priority": 1462,
        "StateCode": null,
        "StateName": null,
        "TimeZone": -640089798
    }], "Offers": [
    {
        "AdultPrice": 2977.6,
        "AdultPriceEUR": 2977.6,
        "AdultPriceExclTax": 0.0,
        "Currency": "EUR",
        "FeeIndexes": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
        ],
        "FlightIndex": 0,
        "IsPaymentIncluded": true,
        "MobileDeepLink": null,
        "PaymentMethods": [
            "American Express",
            "Diners Club",
            "MasterCard Credit",
            "MasterCard Debit",
            "Paypal",
            "Visa Credit",
            "Visa Debit"
        ],
        "Score": 2501.3,
        "SegmentFares": null,
        "SegmentKey": -1,
        "TicketClassIndex": 1,
        "TotalIsCalculated": false,
        "TotalPrice": 2977.6,
        "TotalPriceEUR": 2977.6,
        "TotalPriceExclTax": 0.0
    },
    {
        "AdultPrice": 4697.27,
        "AdultPriceEUR": 4697.27,
        "AdultPriceExclTax": 0.0,
        "Currency": "EUR",
        "FeeIndexes": [
            0,
            1,
            2,
            3,
            4,
            7,
            8,
            5,
            6
        ],
        "FlightIndex": 1,
        "IsPaymentIncluded": true,
        "MobileDeepLink": null,
        "PaymentMethods": [
            "American Express",
            "Diners Club",
            "MasterCard Credit",
            "MasterCard Debit",
            "Paypal",
            "Sofortüberweisung",
            "Überweisung",
            "Visa Credit",
            "Visa Debit"
        ],
        "Score": 3438.64,
        "SegmentFares": null,
        "SegmentKey": -1,
        "TicketClassIndex": 1,
        "TotalIsCalculated": false,
        "TotalPrice": 4697.27,
        "TotalPriceEUR": 4697.27,
        "TotalPriceExclTax": 0.0
    }]
}

спасибо

BR Тимо

1 Ответ

0 голосов
/ 11 октября 2018

Похоже, вы смотрите на это:

jq '{Offers:[.Offers[] | {Price: .AdultPriceEUR, Currency: .Currency, Link: .Deeplink, Tickettyp: .TicketClassIndex, Flightindex: .FlightIndex }]}' file

Он просто создает новый объект, содержащий таблицу Offers с содержимым, которое вы хотите поместить в нее.

...