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

jq:打印对象中每个条目的键和值

万俟棋
2023-03-14
问题内容

我如何让 jq 像这样使用json:

{
  "host1": { "ip": "10.1.2.3" },
  "host2": { "ip": "10.1.2.2" },
  "host3": { "ip": "10.1.18.1" }
}

并生成以下输出:

host1, 10.1.2.3
host2, 10.1.2.2
host3, 10.1.18.1

我对格式不感兴趣,只是不知道如何访问键名和值。


问题答案:

要将顶级键作为流获取,可以使用内置函数
keys[]。因此,针对您的特定问题的一种解决方案是:

jq -r 'keys[] as $k | "\($k), \(.[$k] | .ip)"'

keys按排序顺序生成密钥名称;如果要按原始顺序使用它们,请使用keys_unsorted

另一种以原始顺序生成密钥的替代方法是:

jq -r 'to_entries[] | "\(.key), \(.value | .ip)"'

CSV和TSV输出

@csv和@tsv过滤器在这里也可能值得考虑,例如

jq -r 'to_entries[] | [.key, .value.ip] | @tsv'

产生:

host1   10.1.2.3
host2   10.1.2.2
host3   10.1.18.1

嵌入式对象

如果像下面的示例中那样嵌入感兴趣的键,则必须沿着所示的行修改jq过滤器。

输入:

{
  "myhosts": {
    "host1": { "ip": "10.1.2.3" },
    "host2": { "ip": "10.1.2.2" },
    "host3": { "ip": "10.1.18.1" }
  }
}

修改:

jq -r '.myhosts | keys[] as $k | "\($k), \(.[$k] | .ip)"'


 类似资料:
  • 我有这个JSON: 我想打印键值对,其中键匹配状态和选项,以及时间和它的值。我可以通过使用下面的命令打印时间和所有键值对,但不确定如何提取特定的键值对。 这将产生以下输出: 但我想要的结果是:

  • 我的数组正在加载,并且正在按计划(按照它们在文件中出现的顺序)将卡打印出来。当我尝试在单独的方法中循环遍历arraylist以检查数据是否存在时,它只打印最后一个对象而不是每个对象。有人能告诉我为什么吗? 加载法 和getAll()方法 运行时,它只打印出.txt文件中的最后一张牌“KS”(黑桃之王)。有人能告诉我为什么会这样吗? 谢谢 }

  • 问题内容: 我有一系列对象,并且正在使用对其进行迭代,这很容易。该数组如下所示: 我的属性如下所示: 在每个迭代中,等于预期的对象之一。无论如何都可以访问键和对象的值?这样我就可以做这样的事情: 其中== 和== 。我已经尝试做这件事,但总是最终只是step对象的索引(这很有意义)。我只是想弄清楚是否还有另一种语法编写方式,以便我可以获取键和值。 感谢您的任何想法/建议。非常感激。 PS。我目前的

  • 使用 Photoshop,您可以打印任何兼容的 3D 模型,而无需担心 3D 打印机的限制。在准备打印时,Photoshop 会自动使 3D 模型防水。Photoshop 还会生成必要的支撑结构(支架和底座),以确保您的 3D 打印能够成功完成。 准备打印 3D 对象 选择“窗口”>“工作区”>“3D”以切换到 3D 工作区。 在 Photoshop 中打开 3D 模型。如果需要,请在打开 3D

  • 问题内容: 说我有以下JSON,存储在我的变量 jsonVariable中 。 我使用以下命令通过jq解析此JSON: 这会给我输出 詹姆斯·布朗 但是,如果我也想获得此人的身份证怎么办?现在,我知道这是一个粗糙且简单的示例- 目前正在使用的程序深度为5或6级,除了select以外还具有许多其他JQ函数。在执行各种过滤方法之后,当我已经深达5或6层时,我需要一种选择父母字段的方法。 有人可以帮忙吗

  • 问题内容: 我是Java的新手。我说,我有一个类 人 。我要列印 上面的代码给出如下输出: 这有什么意义? 该对象是否具有某种唯一标识? 我可以自定义吗?我的意思是编写自己的函数,该函数在打印时会输出? 如果是这样,我该怎么做? 问题答案: 如果要打印任何对象的有意义的内容,则必须实现自己的方法,该方法将覆盖parent()类的方法。默认情况下,所有类(无论您创建什么)都扩展类。 样例代码: 输出