0

编写一个 shell 脚本以从原始 json 数据中自动获取名称、当前和最新可用版本的列表。

我正在尝试使用 shell 脚本格式化存储在文件中的 JSON 数据。我尝试使用JQ命令行 JSON 解析器。

我想在脚本中获取格式化的 JSON 数据。它们是 JQ 中为相同场景提供的高级选项。我无法正确使用它。

示例:包含以下 JSON 的文件

{
  "endpoint": {
    "name": "test-plugin",
    "version": "0.0.1"
  },
  "dependencies": {
    "plugin1": {
      "main": {
        "name": "plugin1name",
        "description": "Dummy text"
      },
      "pkgMeta": {
        "name": "plugin1name",
        "version": "0.0.1"
      },
      "dependencies": {},
      "versions": [
        "0.0.5",
        "0.0.4",
        "0.0.3",
        "0.0.2",
        "0.0.1"
      ],
      "update": {
        "latest": "0.0.5"
      }
    },
    "plugin2": {
      "main": {
        "name": "plugin2name",
        "description": "Dummy text"
      },
      "pkgMeta": {
        "name": "plugin2name",
        "version": "0.1.1"
      },
      "dependencies": {},
      "versions": [
        "0.1.5",
        "0.1.4",
        "0.1.3",
        "0.1.2",
        "0.1.1"
      ],
      "update": {
        "latest": "0.1.5"
      }
    }

   }
}

试图以格式获得结果

[{name: "plugin1name", 
    c_version: "0.0.1", 
    n_version: "0.0.5"
 },
 {name: "plugin2name", 
    c_version: "0.1.1", 
    n_version: "0.1.5"}]

有人可以提出任何建议吗?

4

1 回答 1

0

您的 json 文件在以下位置无效:.dependencies.pkgMeta.version

修复 json 文件后,尝试以下命令:

jq '
  .dependencies |
    to_entries |
      map(.value |
        {
          name: .main.name,
          c_version: .pkgMeta.version,
          n_version: .update.latest
        }
      )' input.json

结果是:

[
  {
    "name": "plugin1name",
    "c_version": "0.0.1",
    "n_version": "0.0.5"
  },
  {
    "name": "plugin2name",
    "c_version": "0.1.1",
    "n_version": "0.1.5"
  }
]
于 2014-10-10T09:26:04.733 回答