【问题标题】:Add string to each row when converting json to csv with JQ使用 JQ 将 json 转换为 csv 时向每一行添加字符串
【发布时间】:2021-10-12 04:07:50
【问题描述】:

我正在尝试转换此 JSON:

{
  "reservationSummary": {
    "pickLoc": {
      "locationCode": "EWR"
    }
  },
  "vehicleSummaryList": [
    {
      "carGroup": "Economy",
      "carClass": "A",
      "payNowRate": {
        "amount": "2327.49",
        "totalRateAmount": "3387.19"
      },
      "payLaterRate": {
        "amount": "2449.99",
        "totalRateAmount": "3540.79"
      }    },
    {
      "carGroup": "Compact",
      "carClass": "B",
      "payNowRate": {
        "amount": "2327.49",
        "totalRateAmount": "3387.19"
      },
      "payLaterRate": {
        "amount": "2449.99",
        "totalRateAmount": "3540.79"
      }    }
  ]
}

转换成如下所示的 csv:

EWR,A,Economy,A,3540.79
EWR,B,Compact,A,3540.79

注意:我将EWR(从.reservationSummary.pickLoc.locationCode添加到每行的第一列。

我已经成功地获得了没有它的 csv,如下所示:

jq -r '(.vehicleSummaryList[] | [.carClass, .carGroup, .carAvailability, .payLaterRate.totalRateAmount])|@csv' examle.json

但是像这样添加.reservationSummary.pickLoc.locationCode 的任何尝试:

jq -r '.reservationSummary.pickLoc.locationCode, (.vehicleSummaryList[] | [.carClass, .carGroup, .carAvailability, .payLaterRate.totalRateAmount])|@csv' examle.json

得到这样的错误:

jq: error (at examle.json:51): string ("EWR") cannot be csv-formatted, only array

【问题讨论】:

    标签: json csv jq


    【解决方案1】:

    @csv 需要一个数组作为输入,但.reservationSummary.pickLoc.locationCode 只产生一个字符串。相反,通过将其包装成 [] 使其成为一个数组,然后使用 + 将两个数组相加:

    [.reservationSummary.pickLoc.locationCode] + (
      .vehicleSummaryList[]
      | [.carClass, .carGroup, .carAvailability, .payLaterRate.totalRateAmount]
    )
    | @csv
    

    【讨论】:

      猜你喜欢
      • 2019-11-21
      • 2021-09-03
      • 2015-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多