将一对多json转换为csv

我正在尝试解析API调用中的json输出。输出有一个订单数组,每个订单都有一个项目数组。我想对输出进行解析,以便每个项目的单个CSV输出及其父订单ID。

因此,如果单个订单包含多个商品,则需要按其订单中的每个商品重复输入orderID。我已经阅读了jq文档和许多示例,并且尝试了数小时的反复试验。我对如何做到这一点感到困惑。

我在jq解析语法方面非常挣扎。这些示例都没有真正的帮助,我只是感到困惑。这是基础知识:

curl -s https://api.site.com/orders?page=1&pageSize=10 | jq '.'

下面是json的示例。

{
  "orders": [
    {
      "orderId": 217356098,"items": [
        {
          "orderItemId": 327010821,"lineItemKey": "1","sku": "AJC-C10S","name": "TestDescription","imageUrl": null,"weight": null,"quantity": 2,"unitPrice": 106.85,"taxAmount": null,"shippingAmount": null,"warehouseLocation": null,"options": [],"productId": null,"fulfillmentSku": null,"adjustment": false,"upc": null,"createDate": "2016-11-09T02:11:28.307","modifyDate": "2016-11-09T02:11:28.307"
        },{
          "orderItemId": 327010822,"sku": "AJC-C106","name": "AnotherTestDescription","modifyDate": "2016-11-09T02:11:28.307"
        }
      ]
    },],"total": 359934,"page": 1,"pages": 179968
}

预期的输出(当然没有列标题)

orderId,orderItemId,sku,name
217356098,327010821,"JC-C10S","TestDescription"
217356098,327010822,"JC-C106","AnotherTestDescription"

如您所见,每个项目都有自己的行,但是如果它们来自相同的订单,则应该在每行上重复orderId。

我该怎么做?

coolcat006 回答:将一对多json转换为csv

使用-r命令行选项,以下jq过滤器:

.orders[]
| .orderId as $oid
| .items[]
| [$oid,.orderItemId,.sku,.name]
| @csv

产生所需的输出。

如果任何选择的值都有可能是[],请考虑在上面的最后一行之前添加如下所示的行:

| map_values(if . == [] then "NONE" else . end)
,

谢谢!做了一点改动:

.orders[]
| .orderId as $oid
| .items[]
| [$oid,.items.orderItemId,.items.sku,.items.name | tostring]
| @csv
本文链接:https://www.f2er.com/3131440.html

大家都在问