JQ:设置顶级路径

时间:2018-10-11 11:38:32

标签: json jq

我在Windows环境下使用jq 1.5修改给定的大型json文件,以从该大型文件中提取单个数组(“优惠”):

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

之后,我得到了一个“未命名”数组。但是对于以后的处理,数组必须保留其旧的“名称”。我检查了文档并找到了setpath函数,但是提取时无法保持名称“ easy”吗?

缩短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 :(得分:1)

看起来像您在看这个

DataTable

它只是创建一个包含jq '{Offers:[.Offers[] | {Price: .AdultPriceEUR, Currency: .Currency, Link: .Deeplink, Tickettyp: .TicketClassIndex, Flightindex: .FlightIndex }]}' file 表的新对象,并包含要放置它的内容。