如何用jq解析这个文件?

How to parse this file with jq?

我刚开始使用 和 json 文件,我正在尝试解析特定文件。 我正在尝试在命令行中使用 jq 来完成它,但是如果有任何其他方法可以正确地完成它,我会试一试。

文件本身如下所示:

{
  "Status": "ok",
  "Code": 200,
  "Message": "",
  "Result": [
    {
      "ID": 123456,
      "Activity": 27,
      "Name": Example1",
      "Coordinate": {
        "Galaxy": 1,
        "System": 22,
        "Position": 3
  },
      "Administrator": false,
      "Inactive": false,
      "Vacation": false,
      "HonorableTarget": false,
      "Debris": {
        "Metal": 0,
        "Crystal": 0,
        "RecyclersNeeded": 0
      },
      "Moon": null,
      "Player": {
        "ID": 111111,
        "Name": "foo",
        "Rank": 4
      },
      "Alliance": null
    },
    {
      "ID": 223344,
      "Activity": 17,
      "Name": "Example2",
      "Coordinate": {
            "Galaxy": 3,
            "System": 44,
            "Position": 5
          },
          "Administrator": false,
          "Inactive": false,
          "Vacation": false,
          "StrongPlayer": false,
          "HonorableTarget": false,
          "Debris": {
            "Metal": 0,
            "Crystal": 0,
            "RecyclersNeeded": 0
          },
          "Moon": null,
          "Player": {
            "ID": 765432,
            "Name": "Player 2",
            "Rank": 3
          },
          "Alliance": null
        },
  (...)
  ]
}

我需要根据 galaxy/system/position 提取信息。 例如,在脚本中包含适当的过滤器并执行类似的操作:

./parser --galaxy=1 --system=22 --position=3

它会给我:

ID : 123456
Name : Example1
Activity : 27
...

我尝试使用 curl 获取我的 json 文件并使用 jq 解析我的文件,但我不知道如何提出这种请求。

以下应该足以让您上路。

首先,假设 JSON 在文件名 galaxy.json 中;其次,假设文件 galaxy.jq 包含以下内容:

.Result[]
| select(.Coordinate | (.Galaxy==$galaxy and .System==$system and .Position==$position))

然后调用:

jq -f so-galaxy.jq --argjson galaxy 1 --argjson system 22 --argjson position 3 galaxy.json

会产生相应的对象:

{
  "ID": 123456,
  "Activity": 27,
  "Name": "Example1",
  "Coordinate": {
    "Galaxy": 1,
    "System": 22,
    "Position": 3
  },
  "Administrator": false,
  "Inactive": false,
  "Vacation": false,
  "HonorableTarget": false,
  "Debris": {
    "Metal": 0,
    "Crystal": 0,
    "RecyclersNeeded": 0
  },
  "Moon": null,
  "Player": {
    "ID": 111111,
    "Name": "foo",
    "Rank": 4
  },
  "Alliance": null
}

键:值格式

如果您希望输出为 key: value 格式,只需将 -r 添加到命令行选项,并将以下内容附加到 jq 过滤器:

| to_entries[]
| "\(.key): \(.value)"

输出

ID: 123456
Activity: 27
Name: Example1
Coordinate: {"Galaxy":1,"System":22,"Position":3}
Administrator: false
Inactive: false
Vacation: false
HonorableTarget: false
Debris: {"Metal":0,"Crystal":0,"RecyclersNeeded":0}
Moon: null
Player: {"ID":111111,"Name":"foo","Rank":4}
Alliance: null