Dado este json:
{"data": [
{
"account_id": "123",
"account_status": "active",
"name": "john doe",
"email": "[email protected]",
"product_access": []
},
{
"account_id": "345",
"account_status": "active",
"name": "jane doe",
"email": "[email protected]",
"last_active": "2023-08-23T13:03:27.811473590Z",
"product_access": [
{
"name": "Product 1",
"key": "product1",
"url": "acme1.com"
},
{
"name": "Product 1",
"key": "product1",
"url": "acme2.com"
},
{
"name": "Product 1",
"key": "product1",
"url": "acme3.com"
},
{
"name": "Product 2",
"key": "product2",
"url": "acme4.com",
"last_active": "2023-08-23T13:03:27.811473590Z"
},
{
"name": "Product 3",
"key": "product3",
"url": "acme5.com"
},
{
"name": "Product 1",
"key": "product1",
"url": "acme4.com",
"last_active": "2023-08-17T18:21:52.472085713Z"
}
]
}
]
}
Estou tentando escrever uma expressão jq de forma que a saída seja a seguinte em um arquivo csv (sem adicionar caracteres de escape aqui para simplificar):
"account_id", "account_status", "name", "email", "Product 1", "Product 2", "Product 3"
"123", "active", "john doe", "[email protected]", ",,"
"345", "active", "jane doe", "[email protected]", "acme1.com, acme2.com, acme3.com, acme4.com", "acme4.com", "acme5.com"
Eu tentei isso até agora...
jq -r '["account_id", "account_status", "name", "email", "product 1", "product 2", "product 3"],
(.data[] | [.account_id, .account_status, .name, .email,
(.product_access[] | select(.key == "product1").url // ""),
(.product_access[] | select(.key == "product2").url // ""),
(.product_access[] | select(.key == "product3").url // "")] | join(",")) | @csv'
Ele não agrupa os URLs do produto n em células únicas.
Você deseja aplicar apenas
join
aos produtos, não a todas as colunas. Você precisa aplicá-lo a cada produto separadamente.Tente isto: