获取JSON文件中的最后一个元素

时间:2016-11-25 18:12:00

标签: json linux bash parsing jq

我有这个JSON文件:

{
      "system.timestamp": "{system.timestamp}",
      "error.state": "{error.state}",
      "system.timestamp": "{system.timestamp}",
      "error.state": "{error.state}",
       "system.timestamp": "{system.timestamp}",
      "error.state": "{error.state}",
      "error.content": "{custom.error.content}"
}

我想只获取JSON文件的最后一个对象,因为我需要检查在每种情况下,最后一个对象是error.content。附加的代码部分只是一个示例文件,实际生成的每个文件将包含至少大约40到50个对象,因此在每种情况下我都需要检查最后一个对象是error.content

我使用jq '. | length'计算了长度。如何在Linux中使用jq命令执行此操作?

注意:它是一个没有任何数组的普通JSON文件。

1 个答案:

答案 0 :(得分:1)

可以使用--stream选项在jq中处理具有重复键的对象,例如:

$ jq -s --stream '.[length-2] | { (.[0][0]): (.[1]) }' input.json
{
  "error.content": "{custom.error.content}"
}

对于大型文件,以下内容可能会更好,因为它可以避免" slurping"输入文件:

$ jq 'first(tostream) | {(.[0][0]): .[1]} ' input.json