【问题标题】:Get the last element in JSON file获取 JSON 文件中的最后一个元素
【发布时间】:2016-11-25 18:11:59
【问题描述】:

我有这个 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 文件。

【问题讨论】:

  • 那不是 JSON……好吧,从技术上讲,我猜你可以说它是。但是拥有一个带有 many 重复键的对象实际上是毫无价值的。任何自尊的 JSON 解析器只会删除/覆盖重复的属性,并且可能会一直保留它。修复它比尝试在那种状态下使用它要好得多。

标签: json linux bash parsing jq


【解决方案1】:

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

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

对于大文件,以下可能会更好,因为它可以避免“吞食”输入文件:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2020-06-15
    • 2017-08-27
    • 1970-01-01
    • 2018-08-25
    • 2012-04-02
    相关资源
    最近更新 更多