当前位置: 首页 > 面试题库 >

如何使用jq将JSON字符串格式化为表?

周朗
2023-03-14
问题内容

刚开始使用Bash脚本编写时,偶然发现jq可与JSON一起使用。

我需要将如下所示的JSON字符串转换为表格以在终端中输出。

[{
    "name": "George",
    "id": 12,
    "email": "george@domain.com"
}, {
    "name": "Jack",
    "id": 18,
    "email": "jack@domain.com"
}, {
    "name": "Joe",
    "id": 19,
    "email": "joe@domain.com"
}]

我要在终端中显示的内容:

ID        Name
=================
12        George
18        Jack
19        Joe

请注意,我不想显示每一行的email属性,因此jq命令应该涉及一些过滤。下面为我​​提供了一个简单的名称和ID列表:

list=$(echo "$data" | jq -r '.[] | .name, .id')
printf "$list"

问题是,我无法将其显示为表格。我知道jq有一些格式化选项,但不如我使用时的选项好printf。我想我想在一个数组中获取这些值,然后可以遍历自己进行格式化…?我尝试过的事情给我带来了不同的结果,但从来没有我真正想要的。

有人可以指出我正确的方向吗?


问题答案:

为什么不这样:

echo '[{
    "name": "George",
    "id": 12,
    "email": "george@domain.com"
}, {
    "name": "Jack",
    "id": 18,
    "email": "jack@domain.com"
}, {
    "name": "Joe",
    "id": 19,
    "email": "joe@domain.com"
}]' | jq -r '.[] | "\(.id)\t\(.name)"'

输出量

12  George
18  Jack
19  Joe

编辑1: 对于细粒度的格式化,请使用以下工具awk

 echo '[{
    "name": "George",
    "id": 12,
    "email": "george@domain.com"
}, {
    "name": "Jack",
    "id": 18,
    "email": "jack@domain.com"
}, {
    "name": "Joe",
    "id": 19,
    "email": "joe@domain.com"
}]' | jq -r '.[] | [.id, .name] | @csv' | awk -v FS="," 'BEGIN{print "ID\tName";print "============"}{printf "%s\t%s%s",$1,$2,ORS}'
ID  Name
============
12  "George"
18  "Jack"
19  "Joe"

编辑2: 回复

无法从jq直接获取包含数组的变量吗?

为什么不?

涉及到一个示例(实际上是从您的示例修改而来的),其中将电子邮件更改为数组说明了这一点

echo '[{
    "name": "George",
    "id": 20,
    "email": [ "george@domain1.com" , "george@domain2.com" ]
}, {
    "name": "Jack",
    "id": 18,
    "email": [ "jack@domain3.com" , "jack@domain5.com" ]
}, {
    "name": "Joe",
    "id": 19,
    "email": [ "joe@domain.com" ]
}]' | jq -r '.[] | .email'

输出量

[
  "george@domain1.com",
  "george@domain2.com"
]
[
  "jack@domain3.com",
  "jack@domain5.com"
]
[
  "joe@domain.com"
]


 类似资料:
  • 问题内容: 我有一个名为date的LocalDate变量,当我打印它时显示1988-05-05,我需要将此变量转换为要打印为1988年5月5日。如何执行此操作? 问题答案: 如果他从Java 8中的新功能LocalDate开始,SimpleDateFormat将无法工作。从我所看到的,您将不得不使用DateTimeFormatter,http://docs.oracle.com/javase/8/

  • 我有一个LocalDate变量名为date,当我打印它时,它显示1988-05-05,我需要将它转换成05.may1988。怎么做?

  • 问题内容: 我正在尝试使用Go来找到“最佳”的方式来将浮点数格式化为字符串。我一直在寻找示例,但是找不到任何可以具体回答我所遇到问题的东西。我要做的就是使用“最佳”方法将浮点数格式化为字符串。小数位数可能会有所不同,但会知道(例如2或4或零)。下面是我要实现的示例。 根据以下示例,我应该使用还是或其他方式? 而且,每种的正常用法是什么? 我也不理解在以下当前使用32的情况下使用32或64的重要性:

  • 问题内容: 我想用JavaScript格式化价格。我想要一个以a 作为参数并返回如下格式的函数: 最好的方法是什么? 问题答案: 好的,根据您的发言,我正在使用此功能: 我乐于接受改进建议(我不愿意仅仅为了做到这一点就不包括YUI :))我已经知道我应该检测到“”。而不只是将其用作小数点分隔符…

  • 问题内容: 我正在尝试解析一个JSON结构,如: 也就是说,JSON中的元素是带有转义json的字符串。 所以,我有一些类似的东西 但这崩溃了 这是因为.c的输出是字符串,而不是JSON。如何让jq解析此字符串? 我最初的解决方案是使用sed将替换所有的逃生字符(,和),但凌乱的,我认为有内置的方式做到这一点? 谢谢! 编辑:另外,这里可用的jq版本是: 我想我可以根据需要更新它。 问题答案: j

  • 本文向大家介绍VBA 使用格式将数字类型转换为字符串并将其格式化为字符串,包括了VBA 使用格式将数字类型转换为字符串并将其格式化为字符串的使用技巧和注意事项,需要的朋友参考一下 示例