我是否可以提取第二级花括号内的所有键值,而忽略第一级花括号中的值

时间:2019-01-11 19:56:53

标签: json csv jq

使用JQ,我尝试读取/提取花括号第二级中的值(.phone,.termination,.duration,而忽略花括号第一级中的值(12345、67891)和78912,已经在第二级括号内重复了。可以这样做吗?

{
    "12345":[{
        "phone": "12345",
        "termination": "picked-up",
        "duration": 5
        }],
    "67891":[{
        "phone": "67891",
        "termination": "picked-up",
        "duration": 10
    }],
    "78912":[{
        "phone": "78912",
        "termination": "busy",
        "duration": 0
    }]
}

我已经尝试通过定义我感兴趣的关键字过滤器来过滤值,但是我显然缺少其他的第一步。也应考虑方括号。 Ty

cat test.json | jq [.phone, .termination, .duration] | less

我想要一行包含描述的三个过滤器的逗号分隔值。

12345, picked-up, 5,
67891, picked-up, 10,
78912, busy, 0

1 个答案:

答案 0 :(得分:2)

如果最里面的键始终处于相同的顺序,则可以使用过滤器:

.[] | [.[][]] | @csv

否则:

.[][]
| [.phone, .termination, .duration]
| @csv

在任何一种情况下,您可能都希望使用-r命令行选项来产生:

"12345","picked-up",5
"67891","picked-up",10
"78912","busy",0

未引用

如果要取消引号,可以再次使用-r选项来使用以下内容:

.[] | [.[][]] | join(", ")

或:

.[][] | "\(.phone), \(.termination), \(.duration)"

使用-r命令行选项,最后两个结果:

12345, picked-up, 5
67891, picked-up, 10
78912, busy, 0