如何使用jq解析此文件?

时间:2018-09-13 01:15:37

标签: json jq parameterization

我刚刚开始使用和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
        },
  (...)
  ]
}

我需要根据星系/系统/位置提取信息。 例如,拥有一个带有适当过滤器的脚本,然后执行类似的操作:

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

它会给我:

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

我试图用curl来抓取我的json文件,用jq来解析我的文件,但是我不知道如何发出这种请求。

1 个答案:

答案 0 :(得分:2)

以下内容足以使您上路。

首先,假设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