刚开始使用Bash脚本,偶然发现jq可以与JSON一起使用。
我需要将如下所示的JSON字符串转换为一个表,以便在终端中输出。
[{
"name": "George",
"id": 12,
"email": "george@domain.example"
}, {
"name": "Jack",
"id": 18,
"email": "jack@domain.example"
}, {
"name": "Joe",
"id": 19,
"email": "joe@domain.example"
}]
我想在终端中显示的内容:
ID Name
=================
12 George
18 Jack
19 Joe
请注意,我不想显示每行的email属性,因此jq命令应该包含一些过滤。
list=$(echo "$data" | jq -r '.[] | .name, .id')
printf "$list"
这样做的问题是,我不能像表格一样显示它。我知道jq有一些格式设置选项,但没有我使用printf
时的选项好。我想我想在一个数组中得到这些值,然后我可以自己循环来进行格式设置...?我尝试的东西给予了我不同的结果,但从来没有我真正想要的。
谁能给我指个方向?
8条答案
按热度按时间cngwdvgl1#
使用
@tsv
过滤器有很多值得推荐的地方,主要是因为它以一种标准的方式处理大量的“边缘情况”:添加标头的方法如下:
结果:
正如@Tobia所指出的,您可能希望使用
column
对jq生成的结果进行后处理,从而格式化表格以便查看。如果您使用的是类似bash的shell,那么column -ts $'\t'
应该是非常可移植的。length*"-"
要自动生成虚线,请执行以下操作:
mitkmikd2#
为什么不这样做:
输出量
**编辑1:**对于细粒度格式,请使用
awk
等工具**编辑2:**回复
我不可能直接从jq得到一个包含数组的变量吗?
为什么不呢?
一个比较复杂的示例(实际上是根据您的示例修改的)演示了这一点,在该示例中,将email更改为数组
输出
j0pj023g3#
手动定义标头不是最佳方法!省略标头也不是最佳方法。
TL;DR
数据
脚本
如何运行
我在总结亚马逊网络服务的一些数据时发现了这个问题。我正在研究的问题,如果你想要另一个例子:
输出量:
输入:
2ul0zpep4#
上面的答案的问题是,它们只有在字段宽度都差不多的情况下才起作用。
要避免此问题,可以使用Linux
column
命令:然后道:
wr98u20j5#
我把所有的React混合在一起,得到所有的行为
函数bash
样品使用
输出
1tuwyuhd6#
如果要生成 HTML 表格而不是终端输出表格:
输出量:
disbfnqx7#
如果值中不包含空格,这可能会有帮助:
输出
vlju58qv8#
更简单的实现:
您可以将以下jq函数添加到
~/.jq
中:然后运行: