shell jq将JSON数组转换为csv

qmb5sa22  于 2023-08-07  发布在  Shell
关注(0)|答案(1)|浏览(120)

我试图格式化一个.json文件在.csv文件我的json文件是复杂的,它混合了数组和括号。我无法成功提取数组值
下面是我JSON文件的一个摘录,我想将其格式化为CSV文件

{
  "creation_date": "2023/06/16 15:55:09",
  "data": {
    "transactionType": "val",
    "environment": "1",
    "location": {
      "zoneId": 2
    },
    "media": {
      "typeCode": 15,
      "postPaymentEvent": [
        {
          "transactionDate": "2022-12-26T16:50:00+01:00",
          "vehicleType": 1,
          "vehicleId": 1533
        },
        {
          "transactionDate": "2022-12-27T16:31:00+01:00",
          "vehicleType": 1,
          "vehicleId": 1533
        },
        {
          "transactionDate": "2022-12-28T15:50:00+01:00",
          "vehicleType": 1,
          "vehicleId": 1533
        }
      ]
    },
    "deviceConfiguration": [
      {
        "id": "PLATFORM_PAR",
        "version": "2.6"
      },
      {
        "id": "PLATFORM_SOFT",
        "version": "2.6"
      }
    ]
  },
  "id": "000-0"
}

字符串
我的jq命令,我想得到所有的值,有和没有数组元素。当我获得值data时,我什么也没有得到。media.postPaymentEvent[0].transactionDate。

jq --raw-output '[ "creation_date", "data.transactionType",  "data.location.zoneId", "data.media.typeCode",  "data.media.postPaymentEvent[0].transactionDate",  "id" ] as $h | $h, (. | [getpath($h[] / ".")]) | @csv'

fdx2calv

fdx2calv1#

聪明。修改代码的最简单方法是将[0]更改为.0,然后匹配整数并将其转换为数字。

#!/usr/bin/jq -rn

[
  "creation_date",
  "data.transactionType",
  "data.location.zoneId",
  "data.media.typeCode",
  "data.media.postPaymentEvent.0.transactionDate",
  "id"
] as $h |

$h,
(inputs | ([getpath($h[] |
                    . / "." |
                    map(if test("^[[:digit:]]+$")
                        then tonumber
                        else . end))
           ])) | @csv

字符串

相关问题