【发布时间】:2020-04-22 14:32:18
【问题描述】:
我有以下 JSON 有效负载,我想使用 jq 将其展平,然后转换为 CSV。
我遇到的问题是我不知道如何处理 books、movies 和 dvds 数组,因为它们每个都有不同数量的结果。
{
"report": {
"clients": [
{
"id": "001",
"name": "client_1",
"books": [
{"sku": "100", "description": "book title: book-A"},
{"sku": "101", "description": "book title: book-B"},
{"sku": "102", "description": "book title: book-C"}
],
"movies": [
{"sku": "200", "description": "movie title: movie-A"},
{"sku": "201", "description": "movie title: movie-B"}
],
"dvds": [
{"sku": "300", "description": "dvd title: dvd-A"}
]
},
{
"id": "002",
"name": "client_2",
"books": [
{"sku": "100", "description": "book title: book-A"},
{"sku": "101", "description": "book title: book-B"},
{"sku": "102", "description": "book title: book-C"},
{"sku": "103", "description": "book title: book-D"},
{"sku": "104", "description": "book title: book-E"}
],
"movies": [
{"sku": "200", "description": "movie title: movie-A"}
],
"dvds": [
{"sku": "300", "description": "dvd title: dvd-A"},
{"sku": "301", "description": "dvd title: dvd-B"},
{"sku": "302", "description": "dvd title: dvd-C"},
{"sku": "303", "description": "dvd title: dvd-D"}
]
}
]
}
}
对于每个book、movie 和dvd 的客户端,我需要引用客户端 ID 和名称。
下面是我想要实现的输出的表示:
c_id | c_name | type | sku | description |
----------|----------|--------|-----|------------------------|
001 | client_1 | books | 100 | book title: book-A |
001 | client_1 | books | 101 | book title: book-B |
001 | client_1 | books | 102 | book title: book-C |
001 | client_1 | movies | 200 | movie title: movie-A |
001 | client_1 | movies | 201 | movie title: movie-B |
001 | client_1 | dvds | 300 | dvd title: dvd-A |
002 | client_2 | books | 100 | book title: book-A |
002 | client_2 | books | 101 | book title: book-B |
002 | client_2 | books | 102 | book title: book-C |
002 | client_2 | books | 103 | book title: book-D |
002 | client_2 | books | 104 | book title: book-E |
002 | client_2 | movies | 200 | movie title: movie-A |
002 | client_2 | dvds | 300 | dvd title: dvd-A |
002 | client_2 | dvds | 301 | dvd title: dvd-B |
002 | client_2 | dvds | 302 | dvd title: dvd-C |
002 | client_2 | dvds | 303 | dvd title: dvd-D |
这是我的jq snippet
任何帮助将不胜感激。
【问题讨论】:
-
这不是一个完整的答案,但既然你提到了 CSV,你看过
@csv过滤器了吗?我注意到你的 sn-p 没有使用它。