从shell脚本中获取格式化数据,该脚本从包含JSON数据的文件中读取

时间:2014-10-10 08:42:18

标签: json shell jq

编写一个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"}]

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

1 个答案:

答案 0 :(得分: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"
  }
]